将 PyQt5 应用程序构建成 `.exe` 文件

677 阅读5分钟

将 PyQt5 应用程序构建成 .exe 文件,即可执行文件,可以使用 PyInstaller 这样的打包工具来完成。PyInstaller 是一个流行的选择,因为它能够处理 PyQt5 应用程序中的各种复杂依赖,并将它们打包成单个可执行文件。以下是详细的步骤:

安装 PyInstaller

如果您还没有安装 PyInstaller,可以通过 pip 安装:

bashCopy code
pip install pyinstaller

使用 PyInstaller 打包您的 PyQt5 应用

  1. 打开命令行:在您的项目目录中打开命令行。如果您的项目在 VSCode 中,可以直接在 VSCode 的终端中操作。

  2. 运行 PyInstaller:在命令行中,使用 PyInstaller 来打包您的主 Python 文件(例如 app.py)。以下是一个基本的命令示例:

    bashCopy code
    pyinstaller --onefile --windowed app.py
    
    • --onefile 选项会创建一个单独的可执行文件。
    • --windowed 选项用于窗口化应用(不带命令行窗口)。
    • app.py 是您的主 Python 脚本。
  3. 指定图标(可选) :如果您想为您的应用程序指定一个图标,可以使用 --icon 选项:

    bashCopy code
    pyinstaller --onefile --windowed --icon=app.ico app.py
    

    其中 app.ico 是您的图标文件。

查找生成的 .exe 文件

完成打包过程后,.exe 文件将位于生成的 dist 文件夹中。例如,如果您的主脚本名为 app.py,则 .exe 文件将命名为 app.exe

测试 .exe 文件

在不同的环境中测试 .exe 文件以确保其正常工作。有时,打包的应用程序可能在不同于开发环境的系统上表现不同。

分发 .exe 文件

您现在可以分发 dist 文件夹中的 .exe 文件给用户。用户不需要安装 Python 或 PyQt5,就可以运行此应用程序。

注意事项

  • 打包过程可能需要一些时间,具体取决于您的应用程序的大小和复杂性。
  • 打包后的应用程序体积可能会比较大,因为它包含了 Python 解释器、PyQt5 库以及您的应用程序所需的所有依赖。
  • 如果您的应用依赖于外部文件或资源,请确保在打包时正确地包含这些资源。您可能需要使用 PyInstaller 的 --add-data 选项来实现这一点。

按照这些步骤,您应该能够成功将 PyQt5 应用程序打包成 .exe 文件。

优化

.exe 文件大小过大是在使用像 PyInstaller 这样的工具将 Python 程序打包为单一可执行文件时常见的问题。这是因为打包工具会将 Python 解释器、您的代码、依赖库以及必要的二进制文件全部包含在一个文件中。以下是一些减小 .exe 文件大小的策略:

1. 使用 UPX 压缩器

UPX (Ultimate Packer for eXecutables) 是一个免费、开源的可执行文件压缩器,能显著减小可执行文件的大小。PyInstaller 支持与 UPX 配合使用。首先,您需要下载并安装 UPX,然后在使用 PyInstaller 时添加 --upx-dir 选项:

shCopy code
pyinstaller --onefile --upx-dir=/path/to/upx your_script.py

2. 优化您的 Python 脚本

  • 移除未使用的模块:确保您的代码中没有导入但未使用的模块。
  • 减少资源文件:如果您的程序使用图像、音频或其他资源文件,尝试减小这些文件的大小或数量。

3. 使用 --noconsole 选项(对于 GUI 应用)

如果您的应用程序是一个图形用户界面 (GUI) 应用,使用 --noconsole 选项可以省略命令行界面,可能会略微减少文件大小:

shCopy code
pyinstaller --onefile --noconsole your_script.py

4. 分析和移除不必要的库

使用 PyInstaller 的 --exclude-module 选项排除不必要的库。首先,您需要确定哪些库是不必要的。这通常涉及到对您的应用程序进行彻底的测试,以确保排除的库不会影响功能。

5. 考虑不使用 --onefile 选项

--onefile 选项会生成一个单独的 .exe 文件,这很方便,但通常会产生较大的文件。不使用这个选项会生成一个包含您的脚本和依赖项的文件夹,而不是单一的文件,这可能会减小总体大小。

6. 使用更高级的打包工具

考虑使用像 PyOxidizer 这样的高级打包工具,这些工具可能提供更高效的打包方法。

注意事项

  • 压缩 .exe 文件可能会增加程序启动的时间,因为在运行之前需要先解压。
  • 在移除任何依赖或资源之前,确保这样做不会影响您的程序的功能。
  • 在进行任何更改后,彻底测试您的应用程序以确保它仍然按预期工作。

减少 .exe 文件的大小是一个权衡过程,您可能需要在文件大小和性能之间找到一个合适的平衡点。

问题

为了阻止这个 DOS 命令行窗口出现,您可以在使用 PyInstaller 时添加 --noconsole--windowed 参数。这两个参数都可以防止命令行窗口出现,但它们有轻微的区别:

  • --noconsole:这个参数用于确保在打开打包后的程序时不会显示命令行窗口。
  • --windowed:这个参数的作用与 --noconsole 相似,但它是专为 GUI 应用设计的。它不仅阻止命令行窗口的出现,还可以在某些情况下防止程序崩溃对话框的显示。

所以,如果您的应用是一个 GUI 应用,建议使用 --windowed 参数。例如:

bashCopy code
pyinstaller --onefile --windowed yourscript.py

如果您的应用确实是命令行工具,并且您希望保留命令行窗口,那么无需采取任何额外操作,因为这是 PyInstaller 的默认行为。