Пытаясь упаковать приложение kivy для Windows, я запустил PyInstaller --onedir <app-name>.spec
следующий файл спецификации:
# -*- mode: python ; coding: utf-8 -*-
from kivy_deps import sdl2, glew
block_cipher = None
a = Analysis(['temp-dir-for-packaging\\main.py'],
pathex=[],
binaries=[],
datas=[],
hiddenimports=[],
hookspath=[],
hooksconfig = {},
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
[],
exclude_binaries=True,
name='one-folder',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
console=True,
disable_windowed_traceback=False,
target_arch=None,
codesign_identity=None,
entitlements_file=None )
coll = COLLECT(exe, Tree('temp-dir-for-packaging\\'),
a.binaries,
a.zipfiles,
a.datas,
*[Tree(p) for p in (sdl2.dep_bins + glew.dep_bins)],
strip=False,
upx=True,
upx_exclude=[],
name='one-folder')
Он сгенерировал файлы в каталоге dist. Однако, когда я запускаю полученный exe, я получаю следующую ошибку:
Error loading Python DLL 'C:\Users\<username>\AppData\Local\Temp\_MEI86482\python39.dll'.
LoadLibrary: The specified module could not be found.
Согласно Документы PyInstaller, по умолчанию, т. е. --onedir
опция не должна, для начала создается временный каталог _MEIxxxxxx.
Где я мог ошибиться?
Похоже, что может быть некоторая путаница с файлами .spec
. Согласно документы:
When you create a spec file, most command options are encoded in the spec file. When you build from a spec file, those options cannot be changed. If they are given on the command line they are ignored and replaced by the options in the spec file.
Only the following command-line options have an effect when building from a spec file:
--upx-dir
--distpath
--workpath
--noconfirm
--ascii
--clean
Файл spec
, который вы разместили, предназначен для создания исполняемого файла onedir
, и добавление параметра --onedir
не имеет никакого эффекта.
Я предлагаю удалить папки build
и dist
вместе с файлом .spec
. Затем создайте новый файл spec
, используя pyi-makespec --onedir
. Затем отредактируйте этот вновь созданный файл .spec
по мере необходимости. Затем запустите pyinstaller <app-name>.spec
без параметров командной строки. Это должно создать папку dist
, в которой нет ничего, кроме другой папки с именем вашего основного файла python. Внутри этой папки вы должны найти все файлы, необходимые для запуска вашего приложения, включая файл python39.dll
и файл exe
.
Благодарю вас! это решило мою проблему, и действительно, на этот раз он связал python39.dll в папке приложения.