py2exe-создание одного исполняемого файла
Мне показалось, что я это слышал py2exe смог это сделать, но я так и не понял. Кто-нибудь успешно сделал это? Могу ли я увидеть ваш setup.py файл, и какие параметры командной строки вы использовали?
в основном я думаю о том, что он дает мне один исполняемый файл, который делает что-то вроде распаковки себя, возможно, /temp и работает.
9 ответов:
PyInstaller будет создан один .exe-файл без зависимостей; используйте . Он делает это путем упаковки всех необходимых общих библиотек в исполняемый файл и распаковки их перед запуском, как вы описываете (EDIT: py2exe также имеет эту функцию, см. Минти!--3-->)
Я использую версию PyInstaller из svn, так как последняя версия (1.3) несколько устарела. Это работает очень хорошо для приложения, которое зависит от PyQt, PyQwt, numpy, scipy и еще несколько.
способ сделать это с помощью py2exe, чтобы использовать опцию bundle_files в вашем setup.py файл. Для одного файла вы хотите установить
bundle_filesк 1compressedзначение True и установите для параметра zipfile значение None. Таким образом, он создает один сжатый файл для легкого распределения.вот более полное описание параметра bundle_file, приведенное непосредственно из сайт py2exe*
С помощью "bundle_files " и"zipfile"
легче (и лучше) способ создания однофайловые исполняемые файлы должны быть установлены bundle_files к 1 или 2, и установить zip-файл нет. Такой подход не требует извлечения файлов в временное расположение, которое обеспечивает гораздо быстрее запуск программы.
допустимые значения для bundle_files:
- 3 (по умолчанию) не пакет
- 2 bundle все, кроме интерпретатора Python
- 1 пакет все, включая интерпретатор Python
Если для zipfile установлено значение None, файлы будут объединены в пакет внутри исполняемого файла вместо библиотеки.застежка-молния.
вот пример setup.py:
from distutils.core import setup import py2exe, sys, os sys.argv.append('py2exe') setup( options = {'py2exe': {'bundle_files': 1, 'compressed': True}}, windows = [{'script': "single.py"}], zipfile = None, )
Как упоминалось в другом плакате, py2exe создаст исполняемый файл + некоторые библиотеки для загрузки. Вы также можете добавить некоторые данные в свою программу.
следующий шаг-использовать установщик, чтобы упаковать все это в одну простую в использовании устанавливаемую/неустановляемую программу.
Я использовал InnoSetup (http://www.jrsoftware.org/isinfo.php) с удовольствием в течение нескольких лет и для коммерческих программ, поэтому я сердечно рекомендую его.
вы должны создать установщик, как упоминалось ранее. Несмотря на то, что py2exe также можно объединить все в один исполняемый файл, установив параметр bundle_files равным 1 и аргумент ключевого слова zipfile равным None, я не рекомендую это для приложений PyGTK.
Это из-за GTK+ пытается загрузить свои файлы данных (местные жители, темы и т. д.) из каталога, из которого он был загружен. Поэтому вы должны убедиться, что каталог вашего исполняемого файла содержит также библиотеки, используемые GTK+ и каталогами lib, share и т. д. Из вашей установки GTK+. В противном случае вы получите проблемы с запуском приложения на машине, где GTK+ не установлен на всей системе.
для более подробной информации читайте мой руководство по py2exe для приложений PyGTK. Он также объясняет, как связать все, но GTK+.
мне удалось создать один exe-файл со всеми ресурсами, встроенными в exe. Я строю на окнах. так что это объяснит некоторые из ОС.системные вызовы, которые я использую.
сначала я попытался преобразовать все мои изображения в bitmats, а затем все мои файлы данных в текстовые строки. но это привело к тому, что окончательный exe был очень большим.
после googleing в течение недели я понял, как изменить скрипт 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 = a строка для вставки в 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!")любые вопросы можно было свободно задавать.
Я сказал bbfreeze создаст один файл .EXE, и новее, чем py2exe.
попробовать c_x freeze он может создать хороший автономный
недавно я использовал py2exe для создания исполняемого файла для post-review для отправки отзывов на ReviewBoard.
Это было setup.py я использовал
from distutils.core import setup import py2exe setup(console=['post-review'])Он создал каталог, содержащий exe-файл и необходимые библиотеки. Я не думаю, что можно использовать py2exe, чтобы получить только один .файл EXE. Если вам это нужно, вам нужно будет сначала использовать py2exe, а затем использовать некоторую форму установщика, чтобы сделать окончательный исполняемый файл.
одна вещь, чтобы заботиться о том, что любые файлы egg, которые вы используете в своем приложении, должны быть распакованы, иначе py2exe не сможет их включить. Это описано в документах py2exe.
нет, это не дает вам ни одного исполняемого файла в том смысле, что у вас есть только один файл после этого - но у вас есть каталог, который содержит все необходимое для запуска вашей программы, в том числе exe-файл.
Я только что написал это setup.py сегодня. Вам нужно только вызвать
python setup.py py2exe.
Comments