Py2Exe как пользоваться: Немного про py2exe / Хабр

Содержание

Немного про py2exe / Хабр

Есть такое приложение. Называется py2exe. Оно позволяет упаковать, сконвертировать программу на python в exe файл (ну, точнее, exe и еще кучку других). Зачем оно все надо? Ну, далеко не у всех пользователей windows установлен интерпретатор python с нужными библиотеками. А вот упакованная программа в идеале должна запуститься на любой windows-машине.

Установка

К сожалению, py2exe не поддерживает третью версию питона.

Скачать py2exe можно на 

SourceForge

.

Если у вас стоит python (а он у вас наверняка стоит), проблем с установкой возникнуть не должно. Ставится в директорию python.

Конвертация

Теперь начинается самое интересное. В директории, где лежит Ваша программа на python, надо создать файл setup.py со следующим содержанием

Copy Source | Copy HTML

  1. from distutils.core import setup
  2. import py2exe
  3.  
  4. setup(
  5.     windows=[{"script":"main. py"}],
  6.     options={"py2exe": {"includes":["sip"]}}
  7. )

Где main.py имя Вашего скрипта.

Далее запускаем упаковку командой:

setup.py py2exe

Да-да, именно так.

Смотрим, что у нас получилось. Две папки.

build — служебная, можно сразу снести.

dist — собственно, в ней и лежит наша программа.

Как было сказанно выше, это не один файлик:

  • main.exe — программа
  • pythonXX.dll — интерпретатор python’a
  • library.zip — архив со скомпилированными исходниками (всего, кроме собственно программы, как я понимаю)
  • .pyd — модули python, которые импортирует программа
  • .dll — библиотеки, оказавшиеся необходимыми
  • и еще файлы по мелочи, ниже будет сказано еще

Неужели все так просто? Неправда;)

Сложности

Скорее всего возникнут какие-то проблемы.

Например, пути к файлам. Не следует использовать относительные пути. Они ведут неведомо куда. Лучше использовать абсолютные.

Как его узнать? в интернете есть решение, функция module_path.

Copy Source | Copy HTML

  1. import os, sys
  2.  
  3. def module_path():
  4.     if hasattr(sys, "frozen"):
  5.         return os.path.dirname(
  6.             unicode(sys.executable, sys.getfilesystemencoding( ))
  7.         )
  8.     return os.path.dirname(unicode(__file__, sys.getfilesystemencoding( )))

Или приложение наотрез откажется запускаться (возможно, не у Вас, а у кого-то еще). Из-за отсутствие библиотек 

Visual Studio

.

В качестве решения проблемы можно установить их на компьютер (но это же не наш метод) или кинуть dll и файл манифеста в папку с программой.

msvcr90.dll и Microsoft.VC90.CRT.manifest

(не знаю как это лицензируется и выкладывать не буду)

Где их взять? Для меня самым простым было переустановить python (все остальное осталось на месте) в режиме «только для меня». И искомые файлы оказались в папке с python.

Целью топика не являлось раскрыть всех особенностей py2exe. Здесь находится туториал, а тут некоторые советы и трюки.

Размер

В силу некоторых особенностей, приложение может получиться ужасающего размера. Но с этим можно и нужно бороться. Идеи подсказал

kAIST

(ну, кроме upx’а =р)

  1. Самое действенное. Сжать библиотеки upx’ом. Консольное приложение. Работает элементарно. На вход передается файл, оно его сжимает. Для моей игры реверси размер уменьшился в ~3 раза.
  2. Удалить unicodedata.pyd, bz2.pyd, select.pyd, w9xpopen.exe. Веса немного, но, как минимум, в проекте станет меньше файлов
  3. Если в setup.py указать опцию optimize:2, то модули будут компилироваться в .pyo (python optimized code), а не в .pyc (python compiler script). Это не дает большого эффекта, но кто знает, может Вам повезет)
  4. И наконец, можно подчистить library.zip от неиспользованных модулей и кодировок. Только аккуратно.

Вывод

Ну вот, кажется, и все. Мы добились, чего хотели. Да, приложение получилось солидного размера (это вам не C++, например), зато на нашем любимом Python:)

py2exe-создание одного исполняемого файла — CodeRoad

Мне удалось создать один файл exe со всеми ресурсами, вложенными в exe.
Я строю на windows. так что это объяснит некоторые из вызовов os.system, которые я использую.

Сначала я попытался преобразовать все мои изображения в растровые изображения, а затем все мои файлы данных в текстовые строки.
но это привело к тому, что окончательный exe был очень-очень большим.

После недельного поиска в Google я понял, как изменить скрипт py2exe в соответствии с моими потребностями.

вот ссылка на патч на sourceforge, которую я отправил, пожалуйста, оставляйте комментарии, чтобы мы могли включить его в
следующее распределение.

http://sourceforge.net/tracker/index.php?func=detail&aid=3334760&group_id=15583&atid=315583

это объясняет все внесенные изменения, я просто добавил новую опцию в строку настройки.
вот мой setup.py.

я постараюсь прокомментировать это как можно лучше.
Пожалуйста, знайте, что мой setup.py сложен из-за того, что я получаю доступ к изображениям по имени файла.
поэтому я должен хранить список, чтобы отслеживать их.

это из заставки want-to-b, которую я пытался сделать.

Я использую exec для создания своей установки во время выполнения, ее проще вырезать и вставлять таким образом.

exec "setup(console=[{'script': 'launcher.py', 'icon_resources': [(0, 'ICON.ico')],\
      'file_resources': [%s], 'other_resources': [(u'INDEX', 1, resource_string[:-1])]}],\
      options={'py2exe': py2exe_options},\
      zipfile = None )" % (bitmap_string[:-1])

разрушение

script = py script я хочу обратиться к exe

icon_resources = значок для exe

file_resources = файлы, которые я хочу встроить в exe

other_resources = строка для встраивания в exe, в данном случае список файлов.

options = py2exe опции для создания всего в одном файле exe

bitmap_strings = список файлов для включения

Пожалуйста, обратите внимание, что file_resources не является допустимой опцией, пока вы не отредактируете свой файл py2exe.py, как описано в ссылке выше.

в первый раз, когда я попытался опубликовать код на этом сайте, если я ошибусь, не увольняйте меня.

from distutils.core import setup
import py2exe #@UnusedImport
import os

#delete the old build drive
os.system("rmdir /s /q dist")

#setup my option for single file output
py2exe_options = dict( ascii=True,  # Exclude encodings
                       excludes=['_ssl',  # Exclude _ssl
                                 'pyreadline', 'difflib', 'doctest', 'locale',
                                 'optparse', 'pickle', 'calendar', 'pbd', 'unittest', 'inspect'],  # Exclude standard library
                       dll_excludes=['msvcr71.dll', 'w9xpopen.exe',
                                     'API-MS-Win-Core-LocalRegistry-L1-1-0.dll',
                                     'API-MS-Win-Core-ProcessThreads-L1-1-0.dll',
                                     'API-MS-Win-Security-Base-L1-1-0.dll',
                                     'KERNELBASE.dll',
                                     'POWRPROF.dll',
                                     ],
                       #compressed=None,  # Compress library.zip
                       bundle_files = 1,
                       optimize = 2                        
                       )

#storage for the images
bitmap_string = '' 
resource_string = ''
index = 0

print "compile image list"                          

for image_name in os.listdir('images/'):
    if image_name.endswith('.jpg'):
        bitmap_string += "( " + str(index+1) + "," + "'" + 'images/' + image_name + "'),"
        resource_string += image_name + " "
        index += 1

print "Starting build\n"

exec "setup(console=[{'script': 'launcher.py', 'icon_resources': [(0, 'ICON.ico')],\
      'file_resources': [%s], 'other_resources': [(u'INDEX', 1, resource_string[:-1])]}],\
      options={'py2exe': py2exe_options},\
      zipfile = None )" % (bitmap_string[:-1])

print "Removing Trash"
os.system("rmdir /s /q build")
os.system("del /q *.pyc")
print "Build Complete"

хорошо, вот и все для setup.py
теперь магия нуждалась в доступе к изображениям.
Я разработал это приложение без py2exe в виду, а затем добавил его позже.
таким образом, вы увидите доступ для обеих ситуаций. если папка с изображениями не может быть найдена
, она пытается извлечь изображения из ресурсов exe. код объяснит это.
это часть моего класса sprite, и он использует directx. но вы можете использовать любой api, который хотите, или просто получить доступ к необработанным данным.
не имеет значения.

def init(self):
    frame = self.env.frame
    use_resource_builtin = True
    if os.path.isdir(SPRITES_FOLDER):
        use_resource_builtin = False
    else:
        image_list = LoadResource(0, u'INDEX', 1).split(' ')

    for (model, file) in SPRITES.items():
        texture = POINTER(IDirect3DTexture9)()
        if use_resource_builtin: 
            data = LoadResource(0, win32con.RT_RCDATA, image_list.index(file)+1) #windll.kernel32.FindResourceW(hmod,typersc,idrsc)               
            d3dxdll.D3DXCreateTextureFromFileInMemory(frame.device,   #Pointer to an IDirect3DDevice9 interface
                                              data,                #Pointer to the file in memory
                                              len(data),           #Size of the file in memory
                                              byref(texture))      #ppTexture
        else:
            d3dxdll.D3DXCreateTextureFromFileA(frame.device, #@UndefinedVariable
                                               SPRITES_FOLDER + file,
                                               byref(texture))            
        self.model_sprites[model] = texture
    #else:
    #    raise Exception("'sprites' folder is not present!")

Любые вопросы можно было задавать свободно.

Как из файла Python3 создать .exe на Windows

Способ 1

Мы рассмотрим создание .exe с помощью библиотеки модуля py2exe.  Для этого необходим Python 3.4 и ниже.

Если у вас установлена более высокая версия Python, попробуйте использовать Способ 2 (ниже)

Для  Python2.х   py2exe доступен по ссылке  http://sourceforge.net/project/showfiles.php?group_id=15583.

В этом примере мы рассмотрим создание .exe на примере Python3.4.

Прежде всего на нужно создать виртуальное окружение  для  Python3.4. В этом примере мы назовем myenv, Вы можете выбрать любое другое имя, но не забывайте сделать соответствующие изменения.

На терминале наберите следующие команды:

>py -3.4 -m venv myenv
> myenv\Scripts\activate.bat

В командной строке появится префикс myenv, а это значит, что виртуальное окружение с именем  myenv загружено. Все команды Python теперь будет использовать новое виртуальное окружение.

Теперь давайте установим py2exe (https://pypi.python.org/pypi/py2exe~~HEAD=dobj) в нашем виртуальном окружении:

>pip  install py2exe

И, наконец, чтобы создать единый EXE-файл,  в нашем виртуальном окружении выполняем команду:

>python -m  py2exe.build_exe hello.py -c --bundle-files 0


(замените  hello.py  на имя  вашего скрипта. Если скрипт находится в другой папке, то нужно использовать полный путь к вашему сценарию, например, C:\Projects\Python\ hello.py). Это создаст папку DIST, которая содержит исполняемый файл. Для быстрого доступа к нему, наберите в терминале:

> explorer dist

Вы увидите путь к папке, где находится EXE-файл.

Примечание: При выполнении, откроется окно и исчезают так же быстро, как и появилось.
Это происходит потому, что операционная система автоматически закрывает терминал, в котором консольная программа закончена.
Для того, чтобы изменить эту ситуацию, можно добавить строчку

> input (" Нажмите для выхода ... ")

в конце файла Python. Интерпретатор будет ждать ввода пользователя, а окно будет оставаться открытым, пока пользователь не нажимает клавишу ввода.

Вы можете подробно изучить использование  py2exe в документации на странице модуля: https://pypi.python.org/pypi/py2exe
Выход из виртуального окружения производится командой

>deactivate

Способ 2

Через командную строку Windows устанавливаем pyinstaller:

>pip install pyinstaller

В командной строке переходим в папку, где находится файл

cd c:\... 

Затем в командной строке набираем команду

 pyinstaller --onefile example.py 

Вместо exapmle.py используем имя файла, из которого нужно создать exe файл.

Через пару минут все готово! Скоркее всего, exe файл будет находится во созданной подпапке dist

Поделитесь с друзьями:

py2exe — генерирует один исполняемый файл

Я был в состоянии создать один исполняемый файл со всеми ресурсами, встроенными в исполняемый файл. Я строю на окнах. так что это объяснит некоторые из вызовов os.system, которые я использую.

Сначала я попытался преобразовать все мои изображения в битовые биты, а затем все мои файлы данных в текстовые строки. но это привело к тому, что конечный файл был очень очень большой.

После недели поиска в Google я понял, как изменить скрипт py2exe для удовлетворения моих потребностей.

вот ссылка на патч на sourceforge, который я отправил, пожалуйста, оставьте комментарии, чтобы мы могли включить их в следующий дистрибутив.

http://sourceforge.net/tracker/index.php?func=detail&aid=3334760&group_id=15583&atid=315583

это объясняет все сделанные изменения, я просто добавил новую опцию в строку установки. вот мой setup.py.

Я постараюсь прокомментировать это как можно лучше. Пожалуйста, знайте, что мой setup.py сложен, потому что я получаю доступ к изображениям по имени файла. поэтому я должен хранить список, чтобы отслеживать их.

это от заставки, которую я хотел сделать.

Я использую exec для генерации моих настроек во время выполнения, их проще вырезать и вставлять.

exec "setup(console=[{'script': 'launcher.py', 'icon_resources': [(0, 'ICON.ico')],\
      'file_resources': [%s], 'other_resources': [(u'INDEX', 1, resource_string[:-1])]}],\
      options={'py2exe': py2exe_options},\
      zipfile = None )" % (bitmap_string[:-1])

сломать

script = py скрипт, который я хочу превратить в exe

icon_resources = значок для exe

file_resources = файлы, которые я хочу встроить в exe

other_resources = строка для встраивания в exe, в данном случае список файлов.

options = py2exe опции для создания всего в один исполняемый файл

bitmap_strings = список файлов для включения

Обратите внимание, что file_resources не является допустимым параметром, пока вы не отредактируете файл py2exe.py, как описано в ссылке выше.

В первый раз, когда я пытался разместить код на этом сайте, если я ошибаюсь, не плачь меня.

from distutils.core import setup
import py2exe #@UnusedImport
import os

#delete the old build drive
os.system("rmdir /s /q dist")

#setup my option for single file output
py2exe_options = dict( ascii=True,  # Exclude encodings
                       excludes=['_ssl',  # Exclude _ssl
                                 'pyreadline', 'difflib', 'doctest', 'locale',
                                 'optparse', 'pickle', 'calendar', 'pbd', 'unittest', 'inspect'],  # Exclude standard library
                       dll_excludes=['msvcr71.dll', 'w9xpopen.exe',
                                     'API-MS-Win-Core-LocalRegistry-L1-1-0.dll',
                                     'API-MS-Win-Core-ProcessThreads-L1-1-0.dll',
                                     'API-MS-Win-Security-Base-L1-1-0.dll',
                                     'KERNELBASE.dll',
                                     'POWRPROF.dll',
                                     ],
                       #compressed=None,  # Compress library.zip
                       bundle_files = 1,
                       optimize = 2                        
                       )

#storage for the images
bitmap_string = '' 
resource_string = ''
index = 0

print "compile image list"                          

for image_name in os.listdir('images/'):
    if image_name.endswith('.jpg'):
        bitmap_string += "( " + str(index+1) + "," + "'" + 'images/' + image_name + "'),"
        resource_string += image_name + " "
        index += 1

print "Starting build\n"

exec "setup(console=[{'script': 'launcher.py', 'icon_resources': [(0, 'ICON.ico')],\
      'file_resources': [%s], 'other_resources': [(u'INDEX', 1, resource_string[:-1])]}],\
      options={'py2exe': py2exe_options},\
      zipfile = None )" % (bitmap_string[:-1])

print "Removing Trash"
os.system("rmdir /s /q build")
os.system("del /q *.pyc")
print "Build Complete"

Хорошо, вот и все для setup.py, теперь волшебство должно было получить доступ к изображениям. Я разработал это приложение без py2exe, а затем добавил его позже. так что вы увидите доступ для обеих ситуаций. если папка с изображениями не может быть найдена, она пытается извлечь изображения из exe-ресурсов. код объяснит это. это часть моего класса спрайтов, и он использует DirectX. но вы можете использовать любой API-интерфейс или просто получить доступ к необработанным данным. не имеет значения

def init(self):
    frame = self.env.frame
    use_resource_builtin = True
    if os.path.isdir(SPRITES_FOLDER):
        use_resource_builtin = False
    else:
        image_list = LoadResource(0, u'INDEX', 1).split(' ')

    for (model, file) in SPRITES.items():
        texture = POINTER(IDirect3DTexture9)()
        if use_resource_builtin: 
            data = LoadResource(0, win32con.RT_RCDATA, image_list.index(file)+1) #windll.kernel32.FindResourceW(hmod,typersc,idrsc)               
            d3dxdll.D3DXCreateTextureFromFileInMemory(frame.device,   #Pointer to an IDirect3DDevice9 interface
                                              data,                #Pointer to the file in memory
                                              len(data),           #Size of the file in memory
                                              byref(texture))      #ppTexture
        else:
            d3dxdll.D3DXCreateTextureFromFileA(frame.device, #@UndefinedVariable
                                               SPRITES_FOLDER + file,
                                               byref(texture))            
        self.model_sprites[model] = texture
    #else:
    #    raise Exception("'sprites' folder is not present!")

Любые вопросы не стеснялись задавать.

утилита py2exe — создание exe-файлов из файлов Python

Утилита py2exe позволяет превратить любой скрипт на Python в обчный исполняемый файл Windows, и запускать его даже без наличия интепретатора Python в системе.

Домашняя страница проекта — http://www.py2exe.org/index.cgi/FrontPage.

Проверяем связь Python-файлов в Windows:

c:>assoc .py
.py=Python.File
c:>ftype Python.File
Python.File="C:Python27python.exe" "%1" %*

Теперь, точно зная — какой у нас Python — качаем файл со страницы http://sourceforge.net/projects/py2exe/files/py2exe/0.6.9/, в данном случае — py2exe-0.6.9.win64-py2.7.amd64.exe.

Устанавливаем, обращаем внимание на пути — может пригодиться в случае проблем:

Для работы py2exe — требуется пакет setuptools.

Качаем скрипт https://bootstrap.pypa.io/ez_setup.py, устанавливаем:

c:>python c:optez_setup.py
...
Installed c:python27libsite-packagessetuptools-12.2-py2.7.egg
Processing dependencies for setuptools==12.2
Finished processing dependencies for setuptools==12.2

Что бы убедиться, что все пакеты готовы к работе — запускаем консоль и проверяем:

c:>python
Python 2.7.6 (default, Nov 10 2013, 19:24:24) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from distutils.core import setup
>>> import py2exe
>>>

Если ошибок импорта нет — то всё работает.

Для создания своего exe-файла — нам потребуется создать файл setup.py с такими содержимым:

from distutils.core import setup
import py2exe

setup(console=['hello.py'])

Создаём Python-скрипт, который будем превращать в exe-файл, в данном случае — он называется hello.py и содержит всего одну строку:

print('Hello World!')

Проверяем как он работает:

c:>python hello.py
Hello World!

Запускаем создание exe:

c:>python setup.py py2exe
...
Make sure you have the license if you distribute any of them, and
make sure you don't distribute files belonging to the operating system.

USER32.dll - C:Windowssystem32USER32.dll
SHELL32.dll - C:Windowssystem32SHELL32.dll
ADVAPI32.dll - C:Windowssystem32ADVAPI32.dll
WS2_32.dll - C:Windowssystem32WS2_32.dll
GDI32.dll - C:Windowssystem32GDI32.dll
KERNEL32.dll - C:Windowssystem32KERNEL32.dll

Проверяем:

c:>dir dist
Volume in drive C is OSDisk
Volume Serial Number is C04B-8B6F

Directory of c:dist

19.02.2015 17:13 <DIR> .
19.02.2015 17:13 <DIR> ..
10.11.2013 18:24 80 896 bz2.pyd
19.02.2015 17:13 24 064 hello.exe
19.02.2015 17:13 1 605 316 library.zip
10.11.2013 18:24 3 004 416 python27.dll
10.11.2013 18:24 10 752 select.pyd
10.11.2013 18:24 689 664 unicodedata.pyd
10.11.2013 18:25 474 624 _hashlib.pyd
7 File(s) 5 889 732 bytes
2 Dir(s) 222 058 872 832 bytes free
c:dist>hello.exe
Hello World!

Готово. Теперь можно скопировать директорию dist на любую Windows-машину, и запускать hello.exe.

Если скрипт импортирует какие-то дополнительные модули — они будут включены в exe— и dll-файлы.

Подробнее смотрите в FAQ — http://www.py2exe.org/index.cgi/FAQ.

Упаковка программ Python с py2exe

Последний раз в «Упаковка программ Python с помощью PyInstallerВ «» мы ввели использование PyInstaller для упаковки программ на Python, и сегодня я познакомлю вас с новым инструментом: py2exe.

Далее будут представлены эти аспекты: базовое использование, расширенные параметры, точки внимания и т. Д.

py2exe — это инструмент, который преобразует скрипт Python в отдельную исполняемую программу (* .exe) в Windows, так что вы можете запустить эту исполняемую программу в Windows без установки python.

  • устанавливать
pip install py2exe

python -m pip install py2exe

Посмотрите на простой пример: сначала напишите простой скрипт, имя файла:helloworld.py:



  
def say_hello(name):  
    print("Hello, " + name)
  
if __name__ == "__main__":  
    name = input("What's your name:")
    say_hello(name)

Вам также нужен скрипт установки для издателя:mysetup.pyИ вставить оператор перед функцией настройки в немimport py2exe

from distutils.core import setup
import py2exe

setup(console=["helloworld.py"])

Затем запустите его следующим образомmysetup.py:

python mysetup.py py2exe

Запустите сгенерированный файл:

Обратите внимание, что он должен работать в среде Windows! В противном случае могут возникнуть следующие исключения:

После выполнения вышеуказанной команды она создаст подкаталог с именем dist, который содержит helloworld.exe, python24.dll, library.zip и т. Д.:

Файлы в подкаталоге dist содержат все, что нужно программе, и вам нужно опубликовать все в этом каталоге вместе.

По умолчанию py2exe создает эти файлы в dist:

1. Один или несколько исполняемых файлов;
2. Несколько файлов .pyd, которые являются скомпилированными расширениями и требуются для исполняемого файла;
3.python **. dll, а также другие файлы .dll, эти .dll нужны для .pyd;
4. Файл library.zip, содержащий скомпилированные чистые модули Python, такие как .pyc или .pyo;

оптимизация настройки

Мы видим, что в сгенерированном каталоге dist много файлов, поэтому можно ли его оптимизировать?









from distutils.core import setup
import py2exe

INCLUDES = []

options = {
    "py2exe" :
        {
            "compressed" : 1, 
            "optimize" : 2,
            "bundle_files" : 1, 
            "includes" : INCLUDES,
            "dll_excludes" : ["MSVCR100.dll"]
        }
}


setup(
    options=options,    
    description = "this is a py2exe test",   
    zipfile=None,
    console = [{"script":'helloworld.py'}])

Параметры могут использоваться для указания некоторых параметров компиляции, например, сжимать ли, упаковывать ли в файл и т. д.

После повторного запуска я обнаружил, что все упаковано в программу helloworld.exe.

Указание дополнительных файлов

Некоторые приложения требуют дополнительных файлов во время выполнения, таких как файлы конфигурации, шрифты и значки. py2exe автоматически не упаковывает их в каталог dist, но вы можете упаковать их через параметры конфигурации.

Может использоваться в сценарии установкиdata_files Опции определяют эти дополнительные файлы, поэтому py2exe может скопировать эти файлы в подкаталог dist.

Формат выглядит следующим образом: data_files = [(«папка назначения», [«имя файла»,]), («папка назначения», [«имя файла»,]), («папка назначения», [«имя файла») ,]),].

Например, наша программа имеет каталог с именем images, который содержит изображения, необходимые для программы.

Затем нам нужно настроить параметр data_files в функции настройки, этот параметр содержит список кортежей(target_dir,files)Где target_dir — это целевой путь, где хранятся указанные файлы, а файлы — это список этих дополнительных файлов.

Примеры:

from distutils.core import setup
import py2exe
 
setup(
 
    windows = ['hello.py],
    data_files = [('images',['images\*.jpg'])]
    )

В приведенном выше примере все файлы jpg в каталоге images упакованы в подкаталог dist / images.

1. Новая версия py2exe поддерживает только python3.3 и выше. Вы можете использовать pip install py2exe_py2 для установки совместимой версии python2;
2. Если при работе под python3.6 возникает ошибка, переключитесь на python3.4 и попробуйте;
3. Если python3 является 64-битным, сгенерированный exe-файл может работать только в 64-битной операционной системе, что можно решить с помощью 32-битного python;

4. В Python 3.3 Windows использует Visual Studio 2010 при сборке Python, поэтому после генерации вам необходимо вручную скопировать msvcr100.dll в сгенерированный каталог (каталог dist), в противном случае конечный файл может работать некорректно;

Или черезdata_files=[("",["MSVCR100.dll"])], Упаковано в

Например, пакет, который я скачал под Win10, копируется в Win7 и работает неправильно:

Когда есть похожие файлы DLL, вы можете обратиться к этому методу для их решения;

Для pyinstaller и py2exe есть преимущества и недостатки для упаковки файлов Python в исполняемые файлы exe. Но конечной целью является запуск непосредственно на обычном компьютере с системой Windows без Python, что очень хорошо.

Каждый может выбирать в соответствии со своими потребностями.

Ссылка:
1、http://irootlee.com/Py2exe/
2、https://www.jianshu.com/p/afc56b647866


Если вы сочтете это полезным, добро пожаловать за мной на WeChat, вместе учитесь, вместе делайте успехи и время от времени запускайте пожертвования книг ~

Недавно были собраны последние учебники по Python и Java для Chuanzhi Podcast 2018! Обратите внимание на этот публичный аккаунт, ответьте «2018» в фоновом режиме, чтобы получить адрес для скачивания.

Создание портативной версии скрипта python для windows: pyinstaller и py2exe

Иногда может захотеться странного: например, сделать дистрибутив программы на python для простого использования в windows, чтобы им можно было пользоваться без установки интерпретатора. Быстрый поиск выдаёт информацию об утилите py2exe. Чуть более глубокое изучение наводит на PyInstaller. Я попробовал обе утилиты, у каждой оказались свои плюсы и минусы.

py2exe

Качаем с официального сайта последнюю версию для python 2.7 и устанавливаем. В папке с нашей программой создаём и сохраняем новый скрипт setup.py:
from distutils.core import setup
import py2exe
setup(console=[‘myprog.py’])

для консольного приложения, для графического:
from distutils.core import setup
import py2exe
setup(windows=[‘myprog.py’])

Запуск скрипта setup.py: python setup.py py2exe

В результате будут созданы каталоги «build» и «dist«. Каталог build используется как рабочая область на время упаковки приложения, и его можно удалить после окончания работы сценария setup.py. Файлы в каталоге dist — это ваше практически  готовое приложение. Можно удалить файлы unicodedata.pyd, bz2.pyd, select.pyd, w9xpopen.exe. Приложение может отказаться запускаться из-за отсутствие библиотек Visual Studio. В качестве решения проблемы можно кинуть dll и файл манифеста в папку с программой: msvcr90.dll и Microsoft.VC90.CRT.manifest. Эти файлы можно найти в папке с python. Готово! Вес двух моих небольших программ составил 11,5 и 13,4 МБайт, или соответсвенно 5,2 и 4,4 в zip-архивах.

PyInstaller

Переходим к PyInstaller. Качаем с официального сайта последнюю версию Python for Windows extensions для python 2.7 и устанавливаем. Качаем с официального сайта последнюю версию PyInstaller, распаковываем архив в \python\Lib\site-packages\, выполняем в папке утилиты python Configure.py.

Создаём файл настройки для своей программы: python Makespec.py yourprogram.py. Его можно редактировать: например, в строке с console=True исправить на False, чтобы при запуске программы не запускалось окно консоли. Собираем программу: python Build.py specfile. Появится новая папка с портативной версией, копировать ничего туда не нужно, PyInstaller уже об этом позаботился, но можно удалить unicodedata.pyd, если это не повлияет на работу программы. Вес программ составил 9,4 и 8,1 МБайт, или 4,8 и 3,9 в zip-архивах.

Подведём итоги: утилита py2exe компактная и простая, подойдёт вам, если вы ограничены по времени или не можете много качать из интернета; утилита PyInstaller даёт возможность тонкой настройки и позволяет собрать компактную программу (особенно, если установлен upx). Выбор за вами!

PS Дополнительная информация: Облегчаем использование pyinstaller для создания exe и Немного про py2exe на хабре.

Создание исполняемых файлов из сценариев Python с помощью py2exe

Введение

Для выполнения сценариев Python требуется множество предварительных условий, таких как наличие установленного Python, наличие множества установленных модулей, использование командной строки и т. Д., В то время как выполнение файла .exe очень просто.

Если вы хотите создать простое приложение и распространить его среди множества пользователей, написать его в виде короткого скрипта Python несложно, но предполагается, что пользователи знают, как запускать скрипт, и Python уже установлен на их машинах.

Примеры, подобные этому, показывают, что есть веская причина для преобразования программ .py в эквивалентные программы .exe в Windows. .exe означает «Исполняемый файл» , который также известен как двоичный .

Самый популярный способ добиться этого — использовать модуль py2exe . В этой статье мы быстро рассмотрим основы py2exe и устраним некоторые распространенные проблемы. Чтобы продолжить, не требуется никаких дополнительных знаний Python, однако вам придется использовать Windows.

Преобразование кода интерпретируемого языка в исполняемый файл — это практика, обычно называемая зависанием .

Установка

py2exe

Чтобы использовать модуль py2exe , нам необходимо его установить. Сделаем так с pip :

  $ pip install py2exe
  

Преобразование скрипта Python в

.exe

Во-первых, давайте напишем программу, которая будет выводить текст на консоль:

  импорт математики
print ("Ганнибал анте Портас")
печать (факториал (4))
  

Давайте запустим следующие команды в командной строке Windows, чтобы создать каталог ( exampDir ), переместим уже написанный код в указанный каталог и, наконец, выполним его:

  $ mkdir exampDir
Пример $ move.py exampDir
$ cd exampDir
$ py example.py
  

Это должно вывести:

  Ганнибал анте Портас
24
  

Всегда проверяйте сценарии перед превращением их в исполняемые файлы, чтобы убедиться, что если есть ошибка, она не вызвана исходным кодом.

Установка и настройка

Создайте в той же папке еще один файл с именем setup.py . Здесь мы сохраним детали конфигурации того, как мы хотим скомпилировать нашу программу. Сейчас мы просто добавим в него пару строк кода:

  из distutils.основная настройка импорта
импортировать py2exe
импортная математика

setup (console = ['example.py'])
  

Если бы мы имели дело с приложением с графическим интерфейсом пользователя, мы бы заменили console на windows следующим образом:

  установка (windows = ['example.py'])
  

Теперь откройте командную строку от имени администратора , перейдите в каталог, который мы только что упомянули, и запустите файл setup.py :

  $ cd exampDir
$ python setup.py py2exe

запущен py2exe
*** поиск необходимых модулей ***
*** результаты анализа ***
...
  

dist папка

Если все сделано правильно, должен появиться подкаталог с именем dist . Внутри него будет несколько разных файлов, в зависимости от вашей программы, и один из них должен быть example.exe . Для его выполнения из консоли введите:

  $ пример
  

И вас встретит наша латинская цитата, за которой следует значение 4 !:

  Ганнибал анте Портас
24
  

Или вы можете дважды щелкнуть по нему, и он запустится в консоли.

Ознакомьтесь с нашим практическим практическим руководством по изучению Git с лучшими практиками, общепринятыми стандартами и включенной шпаргалкой. Прекратите гуглить команды Git и на самом деле выучите его !

Если вы хотите объединить все файлы, добавьте bundle_files и сжатых и установите для zipfile значение Нет, например:

  из настройки импорта distutils.core
импортировать py2exe

настраивать(
    options = {'py2exe': {'bundle_files': 1, 'compressed': True}},
    console = [{'script': "пример.py "}],
    zipfile = Нет,
)
  

И повторно запустите команды, чтобы сгенерировать файл .exe .

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

Поиск и устранение неисправностей

Ошибки при преобразовании файлов .py, в файлы .exe, являются обычным явлением, поэтому мы перечислим некоторые распространенные ошибки и решения.

Как исправить отсутствующие библиотеки DLL после использования py2exe

Распространенная проблема с py2exe отсутствует .dll -s.

DLL означает «библиотека с динамической компоновкой», и они существуют не только для того, чтобы делать ошибки, обещаю. DLL содержат код, данные и ресурсы, которые могут понадобиться нашей программе во время выполнения.

После запуска .exe , если вы получите системную ошибку, которая говорит что-то вроде:

  Программа не может запуститься, потому что на вашем компьютере отсутствует something.dll. Попробуйте переустановить программу, чтобы решить эту проблему.
  

Или в командной строке написано:

  ImportError: (Ошибка загрузки DLL: не удалось найти указанный модуль.)
  

Решение — найти недостающую .dll и вставить ее в папку dist . Есть два способа сделать это.

  1. Найдите файл на своем компьютере и скопируйте его. Это будет работать большую часть времени.
  2. Найдите недостающую .dll в Интернете и загрузите ее. Старайтесь не скачивать его с какого-нибудь теневого сайта.
Как сгенерировать 32/64-разрядные исполняемые файлы с помощью py2exe?

Чтобы создать 64-битный исполняемый файл, установите на ваше устройство 64-битный Python.То же самое и с 32-битной версией.

Как использовать py2exe в Linux или Mac

py2exe не поддерживает Linux или Mac, поскольку он предназначен для создания файлов .exe , которые являются уникальным для Windows форматом. Вы можете загрузить виртуальную машину Windows как на Mac, так и на Linux, использовать Wine или использовать другой инструмент, например Pyinstaller в Linux или py2app на Mac.

Заключение

Чтобы упростить запуск проектов Python на устройствах Windows, нам нужно сгенерировать исполняемый файл.Мы можем использовать множество различных инструментов, таких как Pyinstaller , auto-py-to-exe , cx_Freeze и py2exe .

Двоичные файлы могут использовать библиотеки DLL, поэтому обязательно включите их в свой проект.

Создание исполняемых файлов из сценариев Python с помощью py2exe

Введение

Для выполнения сценариев Python требуется множество предварительных условий, таких как наличие установленного Python, наличие множества установленных модулей, использование командной строки и т. Д.при запуске файла .exe очень просто.

Если вы хотите создать простое приложение и распространить его среди множества пользователей, написать его в виде короткого скрипта Python несложно, но предполагается, что пользователи знают, как запускать скрипт, и Python уже установлен на их машинах.

Примеры, подобные этому, показывают, что есть веская причина для преобразования программ .py в эквивалентные программы .exe в Windows. .exe означает «Исполняемый файл» , который также известен как двоичный .

Самый популярный способ добиться этого — использовать модуль py2exe . В этой статье мы быстро рассмотрим основы py2exe и устраним некоторые распространенные проблемы. Чтобы продолжить, не требуется никаких дополнительных знаний Python, однако вам придется использовать Windows.

Преобразование кода интерпретируемого языка в исполняемый файл — это практика, обычно называемая зависанием .

Установка

py2exe

Чтобы использовать модуль py2exe , нам необходимо его установить.Сделаем так с pip :

  $ pip install py2exe
  

Преобразование скрипта Python в

.exe

Во-первых, давайте напишем программу, которая будет выводить текст на консоль:

  импорт математики
print ("Ганнибал анте Портас")
печать (факториал (4))
  

Давайте запустим следующие команды в командной строке Windows, чтобы создать каталог ( exampDir ), переместим уже написанный код в указанный каталог и, наконец, выполним его:

  $ mkdir exampDir
Пример $ move.py exampDir
$ cd exampDir
$ py example.py
  

Это должно вывести:

  Ганнибал анте Портас
24
  

Всегда проверяйте сценарии перед превращением их в исполняемые файлы, чтобы убедиться, что если есть ошибка, она не вызвана исходным кодом.

Установка и настройка

Создайте в той же папке еще один файл с именем setup.py . Здесь мы сохраним детали конфигурации того, как мы хотим скомпилировать нашу программу. Сейчас мы просто добавим в него пару строк кода:

  из distutils.основная настройка импорта
импортировать py2exe
импортная математика

setup (console = ['example.py'])
  

Если бы мы имели дело с приложением с графическим интерфейсом пользователя, мы бы заменили console на windows следующим образом:

  установка (windows = ['example.py'])
  

Теперь откройте командную строку от имени администратора , перейдите в каталог, который мы только что упомянули, и запустите файл setup.py :

  $ cd exampDir
$ python setup.py py2exe

запущен py2exe
*** поиск необходимых модулей ***
*** результаты анализа ***
...
  

dist папка

Если все сделано правильно, должен появиться подкаталог с именем dist . Внутри него будет несколько разных файлов, в зависимости от вашей программы, и один из них должен быть example.exe . Для его выполнения из консоли введите:

  $ пример
  

И вас встретит наша латинская цитата, за которой следует значение 4 !:

  Ганнибал анте Портас
24
  

Или вы можете дважды щелкнуть по нему, и он запустится в консоли.

Ознакомьтесь с нашим практическим практическим руководством по изучению Git с лучшими практиками, общепринятыми стандартами и включенной шпаргалкой. Прекратите гуглить команды Git и на самом деле выучите его !

Если вы хотите объединить все файлы, добавьте bundle_files и сжатых и установите для zipfile значение Нет, например:

  из настройки импорта distutils.core
импортировать py2exe

настраивать(
    options = {'py2exe': {'bundle_files': 1, 'compressed': True}},
    console = [{'script': "пример.py "}],
    zipfile = Нет,
)
  

И повторно запустите команды, чтобы сгенерировать файл .exe .

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

Поиск и устранение неисправностей

Ошибки при преобразовании файлов .py, в файлы .exe, являются обычным явлением, поэтому мы перечислим некоторые распространенные ошибки и решения.

Как исправить отсутствующие библиотеки DLL после использования py2exe

Распространенная проблема с py2exe отсутствует .dll -s.

DLL означает «библиотека с динамической компоновкой», и они существуют не только для того, чтобы делать ошибки, обещаю. DLL содержат код, данные и ресурсы, которые могут понадобиться нашей программе во время выполнения.

После запуска .exe , если вы получите системную ошибку, которая говорит что-то вроде:

  Программа не может запуститься, потому что на вашем компьютере отсутствует something.dll. Попробуйте переустановить программу, чтобы решить эту проблему.
  

Или в командной строке написано:

  ImportError: (Ошибка загрузки DLL: не удалось найти указанный модуль.)
  

Решение — найти недостающую .dll и вставить ее в папку dist . Есть два способа сделать это.

  1. Найдите файл на своем компьютере и скопируйте его. Это будет работать большую часть времени.
  2. Найдите недостающую .dll в Интернете и загрузите ее. Старайтесь не скачивать его с какого-нибудь теневого сайта.
Как сгенерировать 32/64-разрядные исполняемые файлы с помощью py2exe?

Чтобы создать 64-битный исполняемый файл, установите на ваше устройство 64-битный Python.То же самое и с 32-битной версией.

Как использовать py2exe в Linux или Mac

py2exe не поддерживает Linux или Mac, поскольку он предназначен для создания файлов .exe , которые являются уникальным для Windows форматом. Вы можете загрузить виртуальную машину Windows как на Mac, так и на Linux, использовать Wine или использовать другой инструмент, например Pyinstaller в Linux или py2app на Mac.

Заключение

Чтобы упростить запуск проектов Python на устройствах Windows, нам нужно сгенерировать исполняемый файл.Мы можем использовать множество различных инструментов, таких как Pyinstaller , auto-py-to-exe , cx_Freeze и py2exe .

Двоичные файлы могут использовать библиотеки DLL, поэтому обязательно включите их в свой проект.

Создание исполняемых файлов из сценариев Python с помощью py2exe

Введение

Для выполнения сценариев Python требуется множество предварительных условий, таких как наличие установленного Python, наличие множества установленных модулей, использование командной строки и т. Д.при запуске файла .exe очень просто.

Если вы хотите создать простое приложение и распространить его среди множества пользователей, написать его в виде короткого скрипта Python несложно, но предполагается, что пользователи знают, как запускать скрипт, и Python уже установлен на их машинах.

Примеры, подобные этому, показывают, что есть веская причина для преобразования программ .py в эквивалентные программы .exe в Windows. .exe означает «Исполняемый файл» , который также известен как двоичный .

Самый популярный способ добиться этого — использовать модуль py2exe . В этой статье мы быстро рассмотрим основы py2exe и устраним некоторые распространенные проблемы. Чтобы продолжить, не требуется никаких дополнительных знаний Python, однако вам придется использовать Windows.

Преобразование кода интерпретируемого языка в исполняемый файл — это практика, обычно называемая зависанием .

Установка

py2exe

Чтобы использовать модуль py2exe , нам необходимо его установить.Сделаем так с pip :

  $ pip install py2exe
  

Преобразование скрипта Python в

.exe

Во-первых, давайте напишем программу, которая будет выводить текст на консоль:

  импорт математики
print ("Ганнибал анте Портас")
печать (факториал (4))
  

Давайте запустим следующие команды в командной строке Windows, чтобы создать каталог ( exampDir ), переместим уже написанный код в указанный каталог и, наконец, выполним его:

  $ mkdir exampDir
Пример $ move.py exampDir
$ cd exampDir
$ py example.py
  

Это должно вывести:

  Ганнибал анте Портас
24
  

Всегда проверяйте сценарии перед превращением их в исполняемые файлы, чтобы убедиться, что если есть ошибка, она не вызвана исходным кодом.

Установка и настройка

Создайте в той же папке еще один файл с именем setup.py . Здесь мы сохраним детали конфигурации того, как мы хотим скомпилировать нашу программу. Сейчас мы просто добавим в него пару строк кода:

  из distutils.основная настройка импорта
импортировать py2exe
импортная математика

setup (console = ['example.py'])
  

Если бы мы имели дело с приложением с графическим интерфейсом пользователя, мы бы заменили console на windows следующим образом:

  установка (windows = ['example.py'])
  

Теперь откройте командную строку от имени администратора , перейдите в каталог, который мы только что упомянули, и запустите файл setup.py :

  $ cd exampDir
$ python setup.py py2exe

запущен py2exe
*** поиск необходимых модулей ***
*** результаты анализа ***
...
  

dist папка

Если все сделано правильно, должен появиться подкаталог с именем dist . Внутри него будет несколько разных файлов, в зависимости от вашей программы, и один из них должен быть example.exe . Для его выполнения из консоли введите:

  $ пример
  

И вас встретит наша латинская цитата, за которой следует значение 4 !:

  Ганнибал анте Портас
24
  

Или вы можете дважды щелкнуть по нему, и он запустится в консоли.

Ознакомьтесь с нашим практическим практическим руководством по изучению Git с лучшими практиками, общепринятыми стандартами и включенной шпаргалкой. Прекратите гуглить команды Git и на самом деле выучите его !

Если вы хотите объединить все файлы, добавьте bundle_files и сжатых и установите для zipfile значение Нет, например:

  из настройки импорта distutils.core
импортировать py2exe

настраивать(
    options = {'py2exe': {'bundle_files': 1, 'compressed': True}},
    console = [{'script': "пример.py "}],
    zipfile = Нет,
)
  

И повторно запустите команды, чтобы сгенерировать файл .exe .

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

Поиск и устранение неисправностей

Ошибки при преобразовании файлов .py, в файлы .exe, являются обычным явлением, поэтому мы перечислим некоторые распространенные ошибки и решения.

Как исправить отсутствующие библиотеки DLL после использования py2exe

Распространенная проблема с py2exe отсутствует .dll -s.

DLL означает «библиотека с динамической компоновкой», и они существуют не только для того, чтобы делать ошибки, обещаю. DLL содержат код, данные и ресурсы, которые могут понадобиться нашей программе во время выполнения.

После запуска .exe , если вы получите системную ошибку, которая говорит что-то вроде:

  Программа не может запуститься, потому что на вашем компьютере отсутствует something.dll. Попробуйте переустановить программу, чтобы решить эту проблему.
  

Или в командной строке написано:

  ImportError: (Ошибка загрузки DLL: не удалось найти указанный модуль.)
  

Решение — найти недостающую .dll и вставить ее в папку dist . Есть два способа сделать это.

  1. Найдите файл на своем компьютере и скопируйте его. Это будет работать большую часть времени.
  2. Найдите недостающую .dll в Интернете и загрузите ее. Старайтесь не скачивать его с какого-нибудь теневого сайта.
Как сгенерировать 32/64-разрядные исполняемые файлы с помощью py2exe?

Чтобы создать 64-битный исполняемый файл, установите на ваше устройство 64-битный Python.То же самое и с 32-битной версией.

Как использовать py2exe в Linux или Mac

py2exe не поддерживает Linux или Mac, поскольку он предназначен для создания файлов .exe , которые являются уникальным для Windows форматом. Вы можете загрузить виртуальную машину Windows как на Mac, так и на Linux, использовать Wine или использовать другой инструмент, например Pyinstaller в Linux или py2app на Mac.

Заключение

Чтобы упростить запуск проектов Python на устройствах Windows, нам нужно сгенерировать исполняемый файл.Мы можем использовать множество различных инструментов, таких как Pyinstaller , auto-py-to-exe , cx_Freeze и py2exe .

Двоичные файлы могут использовать библиотеки DLL, поэтому обязательно включите их в свой проект.

python — py2exe — создать один исполняемый файл

Мне удалось создать один exe-файл со всеми ресурсами, встроенными в exe.
Я строю на окнах. так что это объяснит некоторые из используемых мной системных вызовов.

Сначала я попытался преобразовать все мои изображения в битовые маты, а затем все мои файлы данных в текстовые строки.но это привело к тому, что конечный exe был очень большим.

После недели поисков в Google я понял, как изменить скрипт py2exe в соответствии со своими потребностями.

вот ссылка на патч на sourceforge, который я отправил, пожалуйста, оставьте комментарии, чтобы мы могли включить его в
следующая раздача.

http://sourceforge.net/tracker/index.php?func=detail&aid=3334760&group_id=15583&atid=315583

это объясняет все внесенные изменения, я просто добавил новую опцию в строку настройки.вот мой setup.py.

Я постараюсь прокомментировать это как можно лучше.
Пожалуйста, знайте, что мой файл setup.py сложен для того, чтобы получить доступ к изображениям по имени файла.
поэтому я должен хранить список, чтобы отслеживать их.

это из заставки, которую я пытался сделать.

Я использую exec для создания моих настроек во время выполнения, так что его проще вырезать и вставлять.

  exec "setup (console = [{'script': 'launcher.py', 'icon_resources': [(0, 'ICON.ico')], \
      'file_resources': [% s], 'other_resources': [(u'INDEX ', 1, resource_string [: - 1])]}], \
      options = {'py2exe': py2exe_options}, \
      zipfile = None) "% (bitmap_string [: - 1])
  

разбивка

script = py-скрипт, который я хочу превратить в exe

icon_resources = значок для exe

file_resources = файлы, которые я хочу встроить в exe

other_resources = строка для встраивания в exe, в данном случае список файлов.

options = параметры py2exe для создания всего в один exe-файл

bitmap_strings = список файлов для включения

Обратите внимание, что file_resources не является допустимым параметром до тех пор, пока вы не отредактируете файл py2exe.py, как описано в приведенной выше ссылке.

в первый раз я попытался разместить код на этом сайте, если я ошибаюсь, не раздражайте меня.

  из настройки импорта distutils.core
импортировать py2exe # @ UnusedImport
импорт ОС

# удалить старый диск сборки
Операционные системы.система ("rmdir / s / q dist")

#setup мой вариант для вывода в один файл
py2exe_options = dict (ascii = True, # Исключить кодировки
                       excludes = ['_ ssl', # Исключить _ssl
                                 'pyreadline', 'difflib', 'doctest', 'locale',
                                 'optparse', 'pickle', 'calendar', 'pbd', 'unittest', 'inspect'], # Исключить стандартную библиотеку
                       dll_excludes = ['msvcr71.dll', 'w9xpopen.exe',
                                     'API-MS-Win-Core-LocalRegistry-L1-1-0.dll ',
                                     'API-MS-Win-Core-ProcessThreads-L1-1-0.dll',
                                     'API-MS-Win-Security-Base-L1-1-0.dll',
                                     'KERNELBASE.dll',
                                     'POWRPROF.dll',
                                     ],
                       # compressed = None, # Сжать library.zip
                       bundle_files = 1,
                       optimize = 2
                       )

# хранение изображений
bitmap_string = ''
resource_string = ''
индекс = 0

распечатать "составить список изображений"

для image_name в os.listdir ('изображения /'):
    если image_name.endswith ('. jpg'):
        bitmap_string + = "(" + str (index + 1) + "," + "'" +' images / '+ image_name + "'),"
        строка_ресурсов + = имя_изображения + ""
        индекс + = 1

print "Запуск сборки \ n"

exec "setup (console = [{'script': 'launcher.py', 'icon_resources': [(0, 'ICON.ico')], \
      'file_resources': [% s], 'other_resources': [(u'INDEX ', 1, resource_string [: - 1])]}], \
      options = {'py2exe': py2exe_options}, \
      zipfile = None) "% (bitmap_string [: - 1])

распечатать «Удаление мусора»
Операционные системы.система ("rmdir / s / q build")
os.system ("del / q * .pyc")
распечатать "Сборка завершена"
  

хорошо, это для setup.py
теперь магии нужен доступ к изображениям.
Я разработал это приложение без использования py2exe, а затем добавил его позже.
так что вы увидите доступ для обеих ситуаций. если не удается найти папку с изображениями
он пытается вытащить изображения из ресурсов exe. код объяснит это.
это часть моего класса спрайтов, и он использует директекс. но вы можете использовать любой API или просто получить доступ к необработанным данным.не имеет значения.

  def init (самостоятельно):
    frame = self.env.frame
    use_resource_builtin = Истина
    если os.path.isdir (SPRITES_FOLDER):
        use_resource_builtin = Ложь
    еще:
        image_list = LoadResource (0, u'INDEX ', 1) .split (' ')

    для (модель, файл) в SPRITES.items ():
        текстура = УКАЗАТЕЛЬ (IDirect3DTexture9) ()
        если use_resource_builtin:
            data = LoadResource (0, win32con.RT_RCDATA, image_list.index (файл) +1) # windll.kernel32.FindResourceW (hmod, typersc, idrsc)
            d3dxdll.D3DXCreateTextureFromFileInMemory (frame.device, # Указатель на интерфейс IDirect3DDevice9
                                              data, # Указатель на файл в памяти
                                              len (data), # Размер файла в памяти
                                              byref (текстура)) #ppTexture
        еще:
            d3dxdll.D3DXCreateTextureFromFileA (frame.device, # @ UndefinedVariable
                                               SPRITES_FOLDER + файл,
                                               byref (текстура))
        себя.model_sprites [модель] = текстура
    #еще:
    # поднять исключение ("папка 'sprites' отсутствует!")
  

Вы можете задать любые вопросы.

python — Как создать .exe с помощью py2exe (или pyinstaller) в Ubuntu

Дано:
— Ubuntu
— py2exe и pyinstaller
— Скрипт Python с setup.py (или иначе)

  из настройки импорта distutils.core
импортировать py2exe
импорт ОС

настраивать(
version = "1.0",
description = 'foo',
url = "",
name = "foo",
console = [{
    "скрипт": "основной.ру ",
    "dest_base": "foo",
}],
zipfile = "shared.dll",
options = {"py2exe": {
    'bundle_files': 1,
    "оптимизировать": 2,
    «dll_excludes»: ['MSVCP90.dll', 'msvcr71.dll', «IPHLPAPI.DLL», «NSI.dll», «WINNSI.DLL», «WTSAPI32.dll»],
    "включает": ["утилиты"]
}}
)
  

Требуется:
— Один файл .exe и, возможно, немного .dll (я действительно не знаю)

Шаги, которые я сделал:
— установка pip3 и python 3.4 (https://askubuntu.com/questions/524399/issues-with-py2exe)
— установка py2exe для ubuntu «pip3 install py2exe»
— запуск «python3.4 setup.py py2exe «И получил следующую трассировку:

  Traceback (последний звонок последний):
  Файл "setup.py", строка 2, в 
    импортировать py2exe
  Файл "/usr/local/lib/python3.4/dist-packages/py2exe/__init__.py", строка 9, в 
    patch_distutils ()
  Файл "/usr/local/lib/python3.4/dist-packages/py2exe/patch_distutils.py", строка 68, в patch_distutils
    из . импортировать distutils_buildexe
  Файл "/usr/local/lib/python3.4/dist-packages/py2exe/distutils_buildexe.py ", строка 91, в 
    из . время выполнения импорта
  Файл "/usr/local/lib/python3.4/dist-packages/py2exe/runtime.py", строка 3, в 
    из .dllfinder import Scanner, pydll
  Файл "/usr/local/lib/python3.4/dist-packages/py2exe/dllfinder.py", строка 5, в 
    из . import _wapi
  Файл "/usr/local/lib/python3.4/dist-packages/py2exe/_wapi.py", строка 4, в 
    _kernel32 = WinDLL ("kernel32")
NameError: имя WinDLL не определено
  

— установка pyinstaller для ubuntu (https: // github.com / pyinstaller / pyinstaller / wiki)
— запустите «pyinstaller setup.py» (аналогично «pyinstaller -w setup.py») и получите в папке dist много файлов с расширением .so и один файл «setup» без расширения

Что я делаю не так?
Как я могу получить файл .exe в Ubuntu?
Возможно ли это?

PS: Я читал исполняемые файлы Python: py2exe или PyInstaller? Я не нашел ответа.

py2exe: Python для exe Введение

Опубликовано: вторник, 28, -е, , май 2013 г.

py2exe — это простой способ конвертировать скрипты Python в Windows.exe-приложения. Это утилита на основе Distutils, которая позволяет запускать приложения, написанные на Python, на компьютере с Windows, не требуя от пользователя установки Python. Это отличный вариант, когда вам нужно распространить программу для конечного пользователя как отдельное приложение. py2exe в настоящее время работает только в Python 2.x.

Сначала вам нужно скачать и установить py2exe с официального сайта sourceforge

Теперь, чтобы иметь возможность создать исполняемый файл, нам нужно создать файл с именем setup.py в той же папке, где находится скрипт, который вы хотите исполнять:

# setup.py

из distutils.core настройка импорта

import py2exe

setup (console = [‘myscript.py’])

В приведенном выше коде мы собираемся создать исполняемый файл для myscript.py . Функция setup получает параметр console = ['myscript.py '] сообщает py2exe, что у нас есть консольное приложение с именем myscript.py .

Затем, чтобы создать исполняемый файл, просто запустите python setup.py py2exe из командной строки Windows (cmd). Вы увидите много результатов, а затем будут созданы две папки: dist и build . Папка build используется py2exe как временная папка для создания файлов, необходимых для исполняемого файла. В папке dist хранится исполняемый файл и все файлы, необходимые для запуска этого исполняемого файла.Папку build можно безопасно удалить. Примечание. Запуск python setup.py py2exe предполагает, что у вас есть Python в переменной среды пути. Если это не так, просто используйте C: \ Python27 \ python.exe setup.py py2exe .

Теперь проверьте, работает ли ваш исполняемый файл:

Приложения с графическим интерфейсом

Теперь пора создать приложение с графическим интерфейсом. В этом примере мы будем использовать Tkinter:

# tkexample.py

» ‘Очень простой пример Tkinter. » ‘

import Tkinter

from Tkinter import *

root = Tk ()

root.title (‘ A Tk Application ‘)

Label (text =’ I am a label ‘). Pack (pady = 15)

root.mainloop ()

Затем создайте setup.py , мы можем использовать следующий код:

# setup.py

из distutils.core import setup

import py2exe

setup (windows = [‘tkexample.py’])

Функция setup теперь получает параметр windows = ['tkexample.py'] , сообщающий py2exe, что это приложение с графическим интерфейсом пользователя. Снова создайте исполняемый файл с запуском python setup.py py2exe в командной строке Windows. Чтобы запустить приложение, просто перейдите в папку dist в проводнике Windows и дважды щелкните tkexample.exe .

Использование внешних модулей

Предыдущие примеры импортировали модули из стандартной библиотеки Python. py2exe по умолчанию включает стандартные библиотечные модули. Однако, если мы установили стороннюю библиотеку, py2exe, скорее всего, не включит ее. В большинстве случаев нам нужно явно включить его. Примером этого является приложение, использующее библиотеку ReportLab для создания файлов PDF:

1

2

3

4

5

6

7

8

9

10

11

12

13

140004

14

18

19

# счет-фактура.py

из reportlab.pdfgen import canvas

from reportlab.lib.pagesizes письмо импорта

из reportlab.lib.units import mm

if __name__ == ‘__main__’:

name = u’Mr. Джон Доу ‘

city =’ Pereira ‘

address =’ ​​ELM Street ‘

phone =’ 555-7241 ‘

c = canvas.Canvas (filename =’ invoice.pdf ‘, pagesize = (letter [0] , letter [1] / 2))

c.setFont (‘Helvetica’, 10)

# Печать данных клиента

c.drawString (107 * мм, 120 * мм, имя)

c.drawString (107 * мм, 111 * мм, город)

c.drawString (107 * мм, 106 * мм, адрес)

c.drawString ( 107 * мм, 101 * мм, телефон)

c.showPage ()

c.save ()

Чтобы включить модуль ReportLab , мы создаем файл setup.py , передавая словарь опций функции setup :

# setup.py

из distutils.core import setup

import py2exe

setup (

console = [‘invoice.py’],

options = {

‘py2exe’: {

‘packages’: [ ‘reportlab’]

}

}

)

Последний шаг к запуску исполняемого файла на других компьютерах заключается в том, что на компьютере, на котором выполняется исполняемый файл, должен быть установлен распространяемый пакет Microsoft Visual C ++ 2008.Хорошее руководство, объясняющее, как это сделать, можно найти здесь. Затем просто скопируйте папку dist на другой компьютер и запустите файл .exe.

Наконец, примите во внимание следующие рекомендации:

  • Исполняемый файл, созданный в большинстве случаев, является прямым совместимым: если вы создаете исполняемый файл в Windows XP, он будет работать в Vista и 7. Однако он не имеет обратной совместимости: если вы создаете исполняемый файл в Windows 7, он не будет для работы в Windows XP.
  • Если вы импортировали сторонние библиотеки, обязательно протестируйте все функции приложений перед отправкой программного обеспечения, потому что иногда исполняемый файл создается, но некоторые библиотеки отсутствуют. В этом случае вы получите ошибку времени выполнения, когда попытаетесь получить доступ к функции, использующей внешнюю библиотеку.
  • py2exe не обновлялся с 2008 года, поэтому он не будет работать с Python 3.

Если вам нужна дополнительная информация о py2exe, посетите официальный сайт.

Глава 40 — py2exe — документация Python 101 1.0

Проект py2exe раньше был основным способом создания исполняемых файлов Windows из ваших приложений Python. Обычная версия py2exe поддерживает только Python 2.3–2.7. В PyPI указана новая версия, которая также будет работать с Python 3.4. Мы сосредоточимся на версии Python 2.x, хотя эта глава должна работать и с версией Python 3.

У вас есть несколько вариантов для вашего приложения.Вы можете создать программу, которая работает только в терминале, вы можете создать графический интерфейс пользователя (GUI) рабочего стола или можете создать веб-приложение. Мы создадим очень простой интерфейс рабочего стола, который ничего не делает, кроме отображения формы, которую пользователь может заполнить. Мы будем использовать инструментарий графического интерфейса пользователя wxPython, чтобы продемонстрировать, как py2exe может получать пакеты без нашего ведома.

Создание простого графического интерфейса

Вам нужно перейти на сайт wxPython (www.wxpython.org) и загрузить копию, соответствующую вашей версии Python.Если у вас 32-разрядный Python, убедитесь, что вы загрузили 32-разрядный файл wxPython. Вы не можете использовать easy_install или pip для установки wxPython, если у вас нет новейшей версии wxPython для Phoenix, поэтому вам придется получить копию, предварительно созданную для вашей системы, либо с веб-сайта wxPython, либо из диспетчера пакетов вашей системы. Я рекомендую использовать как минимум wxPython 2.9 или выше.

Давайте напишем код!

 импорт wx

класс DemoPanel (wx.Panel):
    "" "" ""

    def __init __ (я, родитель):
        """Конструктор"""
        wx.Панель .__ init __ (сам, родитель)

        label = ["Имя", "Адрес", "Город", "Штат", "Почтовый индекс",
                  «Телефон», «Электронная почта», «Заметки»]

        mainSizer = wx.BoxSizer (wx.VERTICAL)
        lbl = wx.StaticText (self, label = "Пожалуйста, введите свою информацию здесь:")
        lbl.SetFont (wx.Font (12, wx.SWISS, wx.NORMAL, wx.BOLD))
        mainSizer.Add (lbl, 0, wx.ALL, 5)
        для lbl в этикетках:
            sizer = self.buildControls (фунты)
            mainSizer.Add (размер, 1, wx.EXPAND)
        self.SetSizer (mainSizer)
        mainSizer.Макет()

    def buildControls (self, label):
        "" "
        Сложите виджеты вместе
        "" "
        sizer = wx.BoxSizer (wx.ГОРИЗОНТАЛЬНО)
        размер = (80,40)
        font = wx.Font (12, wx.SWISS, wx.NORMAL, wx.BOLD)

        lbl = wx.StaticText (self, label = label, size = размер)
        lbl.SetFont (шрифт)
        sizer.Add (lbl, 0, wx.ALL | wx.CENTER, 5)
        if label! = "Примечания":
            txt = wx.TextCtrl (self, name = label)
        еще:
            txt = wx.TextCtrl (self, style = wx.TE_MULTILINE, name = label)
        калибровщик.Добавить (txt, 1, wx.ALL, 5)
        возвратный измеритель

класс DemoFrame (wx.Frame):
    "" "
    Фрейм, содержащий все остальные виджеты
    "" "

    def __init __ (сам):
        """Конструктор"""
        wx.Frame .__ init __ (self, None, wx.ID_ANY,
                          "Py2Exe Tutorial",
                          размер = (600 400)
                          )
        панель = DemoPanel (самостоятельно)
        self.Show ()

если __name__ == "__main__":
    app = wx.App (Ложь)
    frame = DemoFrame ()
    app.MainLoop ()
 

Если вы запустите приведенный выше код, вы должны увидеть что-то вроде следующего:

Давайте немного разберемся.Мы создаем два класса: DemoPanel и DemoFrame . В wxPython объект wx.Frame — это то, что вы используете для создания фактического «окна», которое вы видите в большинстве случаев. Вы добавляете wx.Panel , чтобы придать вашему приложению надлежащий внешний вид и добавить табуляцию между полями. Родительский объект панели — это фрейм. Фрейм, являющийся виджетом верхнего уровня, не имеет родителя. Панель содержит все остальные виджеты в этом примере. Для компоновки виджетов мы используем сайзеры.Сайзеры позволяют разработчику создавать виджеты, размер которых будет изменяться соответствующим образом при изменении размера самого окна. Вы также можете размещать виджеты на панели, используя абсолютное позиционирование, что не рекомендуется. Мы вызываем метод MainLoop объекта wx.App в конце, чтобы запустить цикл событий, который позволяет wxPython реагировать на события мыши и клавиатуры (например, щелчок, ввод текста и т. Д.).

Теперь мы готовы узнать, как упаковать это приложение в исполняемый файл!

Примечание. Я тестировал Windows 7 с использованием Python 2.7.3, wxPython 2.9.4.0 (классический) и py2exe 0.6.9.

Файл py2exe setup.py

Ключом к любому сценарию py2exe является файл setup.py . Этот файл определяет, что будет включено или исключено, насколько мы сжимаем и объединяем, и многое другое! Вот простейшая настройка, которую мы можем использовать с приведенным выше сценарием wx:

 из настройки импорта distutils.core
импортировать py2exe

настройка (windows = ['sampleApp.py'])
 

Как видите, мы импортируем метод setup из distutils.core , а затем импортируем py2exe . Затем мы вызываем setup с параметром ключевого слова windows и передаем ему имя основного файла внутри объекта списка Python. Если бы вы создавали проект без графического интерфейса пользователя, вы бы использовали клавишу консоли вместо windows . Чтобы запустить этот фрагмент, сохраните его в той же папке, что и ваш сценарий wxPython, откройте командную строку и перейдите в место, где вы сохранили два файла. Затем введите python setup.py py2exe , чтобы запустить его.Если все пойдет хорошо, вы увидите много результатов, оканчивающихся примерно так:

Если вы используете Python 2.6, вы можете получить сообщение об ошибке MSVCP90.dll не найден. Если вы увидите эту ошибку, вам, вероятно, придется найти распространяемый пакет Microsoft Visual C ++ 2008 и установить его, чтобы DLL стала доступной в вашей системе. Иногда вы создаете исполняемый файл, а затем, когда вы его запускаете, он просто не загружается правильно. Когда это происходит, обычно создается файл журнала, который можно использовать, чтобы попытаться выяснить, что произошло.Я также нашел инструмент под названием Dependency Walker , который вы можете запустить для своего исполняемого файла, и он может сообщить вам об отсутствующих элементах, отличных от Python (например, DLL и т. Д.).

Я хотел бы отметить, что файл setup.py не включает явно wxPython. Это означает, что py2exe был достаточно умен, чтобы автоматически включать пакет wxPython. Давайте потратим немного времени на то, чтобы узнать больше о включении и исключении пакетов.

Создание расширенной настройки.py Файл

Давайте посмотрим, какие еще параметры py2exe дает нам для создания двоичных файлов путем создания более сложного файла setup.py .

 из настройки импорта distutils.core
импортировать py2exe

включает = []
excludes = ['_gtkagg', '_tkagg', 'bsddb', 'curses', 'email', 'pywin.debugger',
            'pywin.debugger.dbgcon', 'pywin.dialogs', 'tcl',
            'Tkconstants', 'Tkinter']
пакеты = []
dll_excludes = ['libgdk-win32-2.0-0.dll', 'libgobject-2.0-0.dll', 'tcl84.dll',
                'tk84.dll ']

настраивать(
    options = {"py2exe": {"сжатый": 2,
                          «оптимизировать»: 2,
                          "включает": включает,
                          «исключает»: исключает,
                          "пакеты": пакеты,
                          "dll_excludes": dll_excludes,
                          "bundle_files": 3,
                          "dist_dir": "dist",
                          "xref": ложь,
                          "skip_archive": ложь,
                          "ascii": ложь,
                          "custom_boot_script": '',
                         }
              },
    windows = ['sampleApp.py ']
    )
 

Это говорит само за себя, но давайте все равно распакуем. Сначала мы настраиваем несколько списков, которые передаем параметру options функции настройки.

  • включает в себя список для специальных модулей, которые вам нужно специально включить. Иногда py2exe не может найти определенные модули, поэтому вы можете указать их здесь вручную.
  • Список исключений — это список модулей, которые следует исключить из вашей программы. В этом случае нам не нужен Tkinter, поскольку мы используем wxPython.Этот список исключений — это то, что GUI2Exe будет исключать по умолчанию.
  • Список пакетов Список — это список конкретных пакетов, которые необходимо включить. Опять же, иногда py2exe просто не может что-то найти. Раньше мне приходилось указывать здесь электронную почту, PyCrypto или lxml. Обратите внимание: если список исключений содержит что-то, что вы пытаетесь включить в пакеты, или включает списки, py2exe может продолжать их исключать.
  • dll_excludes — исключает библиотеки DLL, которые нам не нужны в нашем проекте.

В словаре options у нас есть еще несколько вариантов, на которые стоит обратить внимание.Сжатый ключ сообщает py2exe, нужно ли сжимать zip-файл, если он установлен. Клавиша optimize устанавливает уровень оптимизации. Ноль означает отсутствие оптимизации, а 2 — максимальное значение. Установив optimize на 2, мы можем уменьшить размер папки примерно на один мегабайт. Ключ bundle_files связывает библиотеки DLL в zip-файле или exe. Допустимые значения для bundle_files:

  • 1 = связать все, включая интерпретатор Python.
  • 2 = связать все, кроме интерпретатора Python
  • 3 = не объединять (по умолчанию)

Несколько лет назад, когда я впервые изучал py2exe, я спросил в их списке рассылки, какой вариант лучше всего, потому что у меня возникли проблемы с вариантом пакета 1.Мне сказали, что 3, вероятно, самый стабильный. Я пошел с этим и перестал иметь случайные проблемы, так что это то, что я сейчас рекомендую. Если вам не нравится распространять более одного файла, заархивируйте их или создайте установщик. Единственный другой вариант, который я использую в этом списке, — это dist_dir . Я использую его, чтобы экспериментировать с различными вариантами сборки или создавать собственные сборки, когда я не хочу перезаписывать свою основную хорошую сборку. Вы можете прочитать обо всех других вариантах на веб-сайте py2exe.

Пакет py2exe не поддерживает включение яиц Python в свои двоичные файлы, поэтому, если вы установили пакет, от которого ваше приложение зависит как яйцо, при создании исполняемого файла он не будет работать.Вам нужно будет убедиться, что ваши зависимости установлены нормально.

Заключение

На этом этапе вы должны знать достаточно, чтобы самостоятельно начать использовать py2exe. Вы можете заняться и начать распространять свое последнее творение прямо сейчас.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *