Pyinstaller 使用 --onefile 参数创建许多文件

Pyinstaller creates many files with --onefile argument

我正在用 Kivy 和 pyinstaller 打包应用程序。

运行命令

python -m PyInstaller --clean --win-private-assemblies -F GroundControl.spec

创建路径为

的工作可执行文件

\Git\GroundControl\dist\GroundControl\GroundControl.exe

但该文件夹还包含许多其他 .pyd 和 .dll 文件,这些文件是 .exe 文件到 运行 所需的。

有没有办法真正创建一个 .exe 文件来分发或至少减少生成的文件数量?

感谢您的任何建议。

您可以使用 Inno Setup 等安装程序包来创建一 (1) 个 .exe 文件。

如果 pyinstaller 无法找到包含它们的支持文件,您必须手动指定它们。

在您的 GroundControl.spec 中,需要在 Analysis 下找到 datas 条目并在该元组中添加 dlls 和其他文件。更多信息 here.

它应该看起来像这样

a = Analysis(['client.py'],
              pathex=['.'],
              binaries=None,
              datas=[ ('desired_dll.dll', '.') ],
              hiddenimports=[],
              hookspath=[], ...

您需要在此处添加的最常见的 kivy 文件是 .kv,因为默认情况下它们不会被捆绑。

一些补充说明:

  • 你需要运行 pyinstaller --onefile
  • 如果您想在 运行 时访问文件(例如 .kv 文件),则需要调整加载它们的路径。您的应用程序将 运行 放在一个地方,但文件将解压缩到另一个文件夹中。您可以使用此 var sys._MEIPASS.
  • 找到解压缩文件的文件夹