pyinstaller не связывает файлы pyd и dll с --onefile
Я пытаюсь собрать приложение cefpython1 в один исполняемый файл с pyinstaller. У меня есть рабочий файл спецификации, который создает distrubiton для примера cefpython1, cefsimple:
# -*- mode: python -*-
def get_cefpython_path():
import cefpython1 as cefpython
path = os.path.dirname(cefpython.__file__)
return "%s%s" % (path, os.sep)
cefp = get_cefpython_path()
a = Analysis(['cefsimple.py'],
hiddenimports=["json.decoder", "json.scanner", "json.encoder"])
pyz = PYZ(a.pure)
exe = EXE(pyz,
a.scripts,
exclude_binaries=True,
name='cefsimple.exe',
debug=False,
strip=None,
upx=False,
console=False )
coll = COLLECT(exe,
a.binaries + [('icudt.dll', '%s/icudt.dll' % cefp, 'BINARY')],
a.zipfiles,
a.datas + [('locales/en-US.pak', '%s/locales/en-US.pak' % cefp, 'DATA'), ('cefsimple.html', 'cefsimple.html', 'DATA'), ('icon.ico', 'icon.ico', 'DATA')],
strip=None,
upx=False,
name='cefsimple')
Файлы проекта можно найти на моем Google Диске. Не волнуйтесь о setup.py, он содержит сборку py2exe, с которой я играл рядом с pyinstaller. Вам нужны пакеты Python 2.7, Win32gui, cefpython1 и, конечно, pyinstaller, чтобы выполнить это, я тестировал это только с версией Win32! Я даже пытался установить pyinstaller для разработчиков, если он что-то изменит.
Если я попытаюсь выполнить pyinstaller с атрибутом --onefile, то ничего не изменится, pyinstaller просто создаст каталог дистрибутива в dist. Я использую команду: pyinstaller --onefile cefsimple.spec
Протестирован --onefile с простым файлом Python Hello World, и он действительно работает. Что заставляет pyinstaller не создавать ни одного exe-файла? Журнал сборки не показывает ничего интересного, но есть некоторые вещи, которые я не понимаю в файле предупреждения. Например, он говорит, что нет модуля с именем cefpython1.cefpython, но правильный каталог pyd скопирован в каталог dist, и приложение все равно работает.
Вот список файлов, созданных в dist /: cefsimple.lst. Может быть, это поможет найти проблему.
1 ответ
Я использую команду:
pyinstaller --onefile cefsimple.spec
Протестирован --onefile с простым файлом Python Hello World, и он действительно работает. Что заставляет pyinstaller не создавать ни одного exe-файла?
Опция --onefile игнорируется при вводе pyinstaller --onefile cefsimple.spec
потому что.spec уже определяет, получите ли вы каталог или отдельный файл. Файл.spec с функцией COLLECT создаст целое dist
каталог.
Я бы предложил переделать новый файл.spec, набрав pyi-makespec --onefile cefsimple.py
и добавляя обратно ваши различные модификации (данные, двоичные файлы, скрытые импорты...), затем пытаясь pyinstaller cefsimple.spec
без варианта. Это работает для меня с pyinstaller 3.3.1.