PyInstaller打包可执行Exe
使用 PyInstaller 将 Python 脚本打包为 EXE 可执行文件,核心流程与常见命令如下:
1. 安装 PyInstaller
打开终端或命令行,运行:
pip install pyinstaller
2. 基础打包命令
在脚本所在目录下执行以下命令:
-
单文件打包(推荐,生成单个 .exe)
pyinstaller --onefile your_script.py *简写:pyinstaller -F your_script.py* -
隐藏控制台窗口(适用于 GUI 界面程序,如 Tkinter、PyQt)
pyinstaller --onefile --noconsole your_script.py *简写:pyinstaller -F -w your_script.py* -
添加自定义图标(仅支持 .ico 格式)
pyinstaller --onefile --icon=logo.ico your_script.py *简写:pyinstaller -F -i logo.ico your_script.py*
3. 生成产物路径
打包完成后,目录中会生成多个文件夹: * dist/:存放最终生成的 your_script.exe(只需打包分发此文件或此文件夹即可)。 * build/:存放打包过程中的临时文件,打包成功后可直接删除。 * your_script.spec:打包配置文件,用于复杂的高级打包需求。
💡 进阶避坑指南
动态资源打包: 如果程序中读取了外部图片、文本等资源文件,直接打包 静态路径 会报错。需要在代码中加入路径转换逻辑:
并在打包时通过import os import sys def get_resource_path(relative_path): if hasattr(sys, '_MEIPASS'): return os.path.join(sys._MEIPASS, relative_path) return os.path.join(os.path.abspath("."), relative_path)--add-data参数将资源文件注入进去:pyinstaller -F --add-data "img.png;." your_script.py(Windows 系统用分号;分隔,Mac/Linux 用冒号:)
| 常见问题 | 原因与对策 |
|---|---|
| 报 ModuleNotFoundError | 代码使用了动态导入。在打包命令中加上 --hidden-import=缺失的模块名。 |
| EXE 文件体积过大 | 因为 PyInstaller 会把当前环境下的所有第三方库一起打包。建议在 Pipenv 或 Conda 虚拟环境中进行纯净打包。 |
| 跨平台问题 | Windows 只能打包出 .exe,Mac 只能打包出 .app。必须在对应的操作系统上运行 PyInstaller。 |
```