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.

Другие вопросы по тегам