Найти - Пользователи
Полная версия: программы на python
Начало » Python для новичков » программы на python
1
AndreyT
привет прогеры на python, я начал изучать python, и меня интересует такой вопрос можно ли на нем написать крутую прогу для windows, и может ли программы на python запускаться на другом компьютере без интерпретатора
diam123
Чиста реальна на питоне круто пишут крутые проги и круто собирают закрученные standalone экзе которые тянут за собой половину чисто конкретного интерпретатора =\
regall
AndreyT
можно ли на нем написать крутую прогу для windows
да
AndreyT
может ли программы на python запускаться на другом компьютере без интерпретатора
нет. На винде однако можно использовать инструменты типа py2exe, но в больших проектах просто использовать инструмент не получится, придется его допилитвать самому.
bw
Лично я регулярно “на питоне круто пишут крутые проги и круто собирают закрученные standalone экзе”.

> но в больших проектах просто использовать инструмент не получится, придется его допилитвать самому
Т.е. как и везде, потребуется мозг.

..bw
igor.kaist
AndreyT
можно ли на нем написать крутую прогу для windows
Можно, но только если ты реальный кулхацкер!

P.S. Что то в последние месяцы странная обстановка на форуме… Хотя с другой стороны это говорит о возрастающей популярности питона, и подобное наверное неизбежно.

regall
но в больших проектах просто использовать инструмент не получится, придется его допилитвать самому.
Можно примерчик? У меня пока все получается без допиливания. Просто интересно, с чем возможно придется столкнуться.
diam123
igor.kaist
P.S. Что то в последние месяцы странная обстановка на форуме…
Популярность действительно растёт, не вы первый это замечаете. С одной стороны радует, сдругой - нет.
igor.kaist
Можно примерчик? У меня пока все получается без допиливания
Не знаю, можно ли считать допиливанием или нет, но многопоточность в среде py2exe выполняется немного не так как в среде интерпритатора. В случае с py2exe обязательно необходимо дожидаться пока все потоки не завершат работу(Например, бесконечным циклом который проверяет threading.active_count()). Следовательно, хотя бы в этом конкретном случае некоторые модификации кода неизбежны (но не py2exe, если Вы имели ввиду конкретно его)
Андрей Светлов
Как-то немного странно звучит… Не могли бы вы указать, чем именно среда py2exe отличается от среды python так, что это влияет на потоки?
Интересен пример из кода (py2exe, естественно).
Я не уверен 100%, но кажется такой проблемы не встречал.
diam123
Андрей Светлов
Как-то немного странно звучит… Не могли бы вы указать, чем именно среда py2exe отличается от среды python так, что это влияет на потоки?
Уж простите грешного, возможно я неправильно выразился.
Вглубь я не вникал, так как это пока за гранью моих знаний.#Подразумевается ковыряние кода py2exe
Но вот проблема такая у меня была - “преждевременное” окончание потоков.
Пришлось делать так как я описал выше - насильно оставлять основной поток выполнения через бесконечный цикл.
Логически то так оно и должно быть, но в среде интепретатора это было необязательно.
В результате то что при запуске через интерпретатор работало, а после сборки в executable - нет.
И проблемка эта была не только у меня - я уж не помню точно где я это вычитал, но google translate с японского/китайского перевел приблизительно так…
Я постараюсь найти точный линк и оставить здесь, если найду.
Код уже, к сожалению исправлен. Попытаюсь воспроизвести, если выйдет.

UPD Воспроизвёл.
#!/usr/bin/env python
#-*-encoding:UTF-8-*-

import time
import threading

def target():
time.sleep(1)
print u"Опа-па"

for _ in xrange(10):
threading.Thread(target=target).start()
При запуске через интерпритатор - работает.
После “сборки” через py2exe - нет. #Подразумевается работа, такая же как и через интерпритатор
setup.py
# ======================================================== #
# File automagically generated by GUI2Exe version 0.5.0
# Copyright: (c) 2007-2009 Andrea Gavana
# ======================================================== #

# Let's start with some default (for me) imports...

from distutils.core import setup
from py2exe.build_exe import py2exe

import glob
import os
import zlib
import shutil

# Remove the build folder
shutil.rmtree("build", ignore_errors=True)


class Target(object):
""" A simple class that holds information on our executable file. """
def __init__(self, **kw):
""" Default class constructor. Update as you need. """
self.__dict__.update(kw)


# Ok, let's explain why I am doing that.
# Often, data_files, excludes and dll_excludes (but also resources)
# can be very long list of things, and this will clutter too much
# the setup call at the end of this file. So, I put all the big lists
# here and I wrap them using the textwrap module.

data_files = []

includes = []
excludes = ['_gtkagg', '_tkagg', 'bsddb', 'curses', 'email', 'pywin.debugger',
'pywin.debugger.dbgcon', 'pywin.dialogs', 'tcl',
'Tkconstants', 'Tkinter']
packages = []
dll_excludes = ['libgdk-win32-2.0-0.dll', 'libgobject-2.0-0.dll', 'tcl84.dll',
'tk84.dll']
icon_resources = []
bitmap_resources = []
other_resources = []


# This is a place where the user custom code may go. You can do almost
# whatever you want, even modify the data_files, includes and friends
# here as long as they have the same variable name that the setup call
# below is expecting.

# No custom code added


# Ok, now we are going to build our target class.
# I chose this building strategy as it works perfectly for me :-D

GUI2Exe_Target_1 = Target(
# what to build
script = "1.py",
icon_resources = icon_resources,
bitmap_resources = bitmap_resources,
other_resources = other_resources,
dest_base = "1",
version = "0.1",
company_name = "No Company",
copyright = "No Copyrights",
name = "Py2Exe Sample File",

)

# No custom class for UPX compression or Inno Setup script

# That's serious now: we have all (or almost all) the options py2exe
# supports. I put them all even if some of them are usually defaulted
# and not used. Some of them I didn't even know about.

setup(

# No UPX or Inno Setup

data_files = data_files,

options = {"py2exe": {"compressed": 2,
"optimize": 2,
"includes": includes,
"excludes": excludes,
"packages": packages,
"dll_excludes": dll_excludes,
"bundle_files": 1,
"dist_dir": "dist",
"xref": False,
"skip_archive": False,
"ascii": False,
"custom_boot_script": '',
}
},

zipfile = None,
console = [],
windows = [GUI2Exe_Target_1],
service = [],
com_server = [],
ctypes_com_server = []
)

# This is a place where any post-compile code may go.
# You can add as much code as you want, which can be used, for example,
# to clean up your folders or to do some particular post-compilation
# actions.

# No post-compilation code added


# And we are done. That's a setup script :-D
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB