Py2exe - генерировать один исполняемый файл
Мне показалось, что я слышал, что py2exe смог это сделать, но я так и не понял. Кто-нибудь успешно сделал это? Можно ли просмотреть файл setup.py и какие параметры командной строки вы использовали?
В основном, я думаю об этом, давая мне один исполняемый файл, который делает что-то вроде того, что он может распаковать себя, возможно, /temp и работает.
Ответы
Ответ 1
PyInstaller создаст один .exe файл без зависимостей; используйте параметр --onefile
. Он делает это, упаковывая все необходимые общие библиотеки в исполняемый файл и распаковывая их перед запуском, как вы описываете (EDIT: py2exe также имеет эту функцию, см. minty answer)
Я использую версию PyInstaller из svn, так как последняя версия (1.3) несколько устарела. Он отлично работает для приложения, которое зависит от PyQt, PyQwt, numpy, scipy и еще нескольких.
Ответ 2
Способ использования py2exe заключается в использовании опции bundle_files в файле setup.py. Для одного файла вам нужно установить bundle_files
в 1, compressed
в значение True и установить для параметра zipfile значение None. Таким образом, он создает один сжатый файл для легкого распространения.
Ниже приведено более полное описание опции bundle_file, приведенной непосредственно из сайта py2exe *
Использование "bundle_files" и "zipfile"
Более простой (и лучший) способ создания однофайловые исполняемые файлы bundle_files до 1 или 2 и установить zipfile - None. Этот подход не требуется извлечение файлов на временное местоположение, которое обеспечивает гораздо более быстрый запуск программы.
Допустимыми значениями для bundle_files являются:
- 3 (по умолчанию) не связывают
- 2 связывает все, кроме интерпретатора Python
- 1 связывает все, включая интерпретатор Python
Если zipfile установлен в None, файлы будут расслоены в исполняемом файле вместо library.zip.
Вот пример 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,
)
Ответ 3
Как и в других плакатах, py2exe создаст исполняемый файл + некоторые библиотеки для загрузки. Вы также можете добавить некоторые данные для своей программы.
Следующий шаг - использовать установщик, чтобы упаковать все это в одну простую в использовании installable/unistallable программу.
Я использовал InnoSetup (http://www.jrsoftware.org/isinfo.php) с восторгом в течение нескольких лет и для коммерческих программ, поэтому я от всей души рекомендую его.
Ответ 4
Вы должны создать установщик, как упоминалось ранее. Несмотря на то, что py2exe также может объединить все в один исполняемый файл, установив параметр bundle_files на 1 и аргумент ключевого слова zipfile на None, я не рекомендую это для приложений PyGTK.
Что из-за GTK + пытается загрузить свои файлы данных (локали, темы и т.д.) из каталога, из которого он был загружен. Поэтому вы должны убедиться, что каталог вашего исполняемого файла содержит также библиотеки, используемые GTK +, и каталоги lib, share и т.д. Из вашей установки GTK+. В противном случае у вас возникнут проблемы с запуском вашего приложения на компьютере, где GTK + не установлен в системном масштабе.
Подробнее читайте руководство по py2exe для приложений PyGTK. Он также объясняет, как собрать все, но GTK +.
Ответ 5
Мне удалось создать один файл exe со всеми ресурсами, встроенными в exe.
Я строю на окнах. так что объясню некоторые из вызовов os.system, которые я использую.
Сначала я попытался преобразовать все мои изображения в битматы, а затем все мои файлы данных в текстовые строки.
но это привело к тому, что окончательный exe был очень большим.
После googleing в течение недели я выяснил, как изменить py2exe script для удовлетворения моих потребностей.
вот ссылка на ссылку на sourceforge i, пожалуйста, напишите комментарии, чтобы мы могли включить ее в
следующее распределение.
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 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"
ok, это для 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!")
Любые вопросы были свободными спросить.
Ответ 6
Мне сказали bbfreeze создаст один файл .EXE и будет более новым, чем py2exe.
Ответ 7
попробовать
c_x freeze
он может создать хороший автономный
Ответ 8
Недавно я использовал py2exe для создания исполняемого файла для последующего просмотра для отправки отзывов на ReviewBoard.
Это был setup.py. Я использовал
from distutils.core import setup
import py2exe
setup(console=['post-review'])
Он создал каталог, содержащий exe файл и необходимые библиотеки. Я не думаю, что можно использовать py2exe для получения всего одного файла .exe. Если вам нужно, вам нужно будет сначала использовать py2exe, а затем использовать некоторую форму установщика, чтобы сделать окончательный исполняемый файл.
Одна вещь, о которой стоит позаботиться, это то, что любые файлы яиц, которые вы используете в своем приложении, должны быть распакованы, иначе py2exe не может их включить. Это описано в документах py2exe.
Ответ 9
Нет, он не дает вам одного исполняемого файла в том смысле, что у вас есть только один файл, но у вас есть каталог, содержащий все необходимое для запуска вашей программы, включая exe файл.
Я просто написал этот setup.py сегодня. Вам нужно всего лишь вызвать python setup.py py2exe
.