使用 PyInstaller 打包的 Kivy One-Folder 寻找 _MEIxxxxxx 路径?

Kivy One-Folder packaging with PyInstaller looks for _MEIxxxxxx path?

希望在 windows 上打包一个 kivy 应用程序,我 运行 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 docs,默认即 --onedir 选项 不应 创建一个临时的 _MEIxxxxxx 目录。

我哪里可能出错了?

听起来可能与 .spec 个文件有些混淆。根据 docs:

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选项没有效果。

我建议删除 builddist 文件夹以及 .spec 文件。然后使用 pyi-makespec --onedir 创建一个新的 spec 文件。然后根据需要编辑新创建的 .spec 文件。然后 运行 pyinstaller <app-name>.spec 没有命令行选项。这应该会创建一个 dist 文件夹,其中除了另一个具有主 python 文件名称的文件夹之外什么也没有。在该文件夹中,您应该可以找到 运行 您的应用程序所需的所有文件,包括一个 python39.dll 文件和一个 exe 文件。