使用pyinstaller打包的exe文件太大,怎么办
PyInstaller 提供了许多命令行选项,可以帮助我们进一步优化打包文件的大小。
1. --onefile vs --onedir
--onefile(默认-F): 将所有文件打包成一个独立的.exe文件。- 优点: 分发方便,用户只需运行一个文件。
- 缺点: 启动速度可能较慢,且文件解压到临时目录时会占用更多空间,总大小有时会略大。
--onedir(默认): 将所有文件打包到一个文件夹中,其中包含主.exe文件和所有依赖库。- 优点: 启动速度快,调试方便。
- 缺点: 需要分发整个文件夹,不方便。
对于追求最小体积和快速启动的场景,--onedir 可能是一个更好的选择,尽管它需要分发一个文件夹。但通常,为了方便,我们还是会选择 --onefile,然后配合其他优化选项。
2. --noconsole (默认 -w)
如果你打包的是一个带有图形用户界面(GUI)的应用程序,或者不希望在运行时弹出命令行窗口,可以使用 --noconsole 选项。这有时也能稍微减小文件大小。
pyinstaller --onefile --noconsole my_app.py
3. --strip
这个选项会尝试从可执行文件和库中移除调试符号表(debug symbols)。这可以显著减小文件大小,但会使调试变得困难。在发布最终版本时非常有用。
pyinstaller --onefile --noconsole --strip my_app.py
4. --exclude-module <module_name>
如果你的程序不使用某个标准库或第三方库的特定模块,但 PyInstaller 错误地将其包含进来,你可以使用此选项将其排除。例如,如果你的应用是纯命令行,不需要 tkinter:
pyinstaller --onefile --noconsole --exclude-module tkinter my_app.py
注意: 确保你排除的模块确实不会被你的程序或其依赖所使用,否则会导致运行时错误。
5. --paths <path> (默认 -p)
如果 PyInstaller 无法找到某个模块,或者你希望它在特定目录中查找模块,可以使用 --paths 添加额外的搜索路径。虽然这通常不是减小大小的直接方法,但它能帮助解决依赖缺失问题。
6. --upx-dir <UPX_path> / UPX 压缩
UPX (Ultimate Packer for eXecutables) 是一个免费的、开源的、高度可压缩的可执行文件打包器。它可以将 .exe、.dll 等文件进行压缩,从而大大减小文件大小。PyInstaller 能够与 UPX 无缝集成。
使用步骤:
- 下载 UPX: 访问 UPX 官方网站 https://upx.github.io/,下载与你操作系统对应的最新版本 UPX。
- 解压 UPX: 将下载的压缩包解压到一个容易记住的路径,例如
C:\Users\YourUser\upx-3.96-win64。 - 在 PyInstaller 中使用 UPX: 在运行
pyinstaller命令时,通过--upx-dir选项指定 UPX 的路径(UPX 可执行文件所在的目录)。
# 假设 UPX 解压在 C:\Users\YourUser\upx-3.96-win64 目录下 pyinstaller --onefile --noconsole --strip --upx-dir C:\Users\YourUser\upx-3.96-win64 my_app.py
如果将upx.exe的路径添加到系统环境变量PATH中,则可以直接使用--upx-dir .或不指定该选项(PyInstaller 会自动尝试查找)。
UPX 的注意事项:
- 压缩率极高: UPX 可以将文件大小减小 50% 甚至更多。
- 潜在的杀毒软件误报: 由于 UPX 改变了可执行文件的结构,一些杀毒软件可能会将其误报为病毒或恶意软件。这是 UPX 的常见副作用,但通常是误报。如果遇到这种情况,可以尝试将文件添加到杀毒软件的白名单中,或者在对安全性要求极高的分发场景中避免使用 UPX。

浙公网安备 33010602011771号