PyInstaller 是一个将 Python 程序打包成独立可执行文件的工具,支持 Windows、Linux、macOS 等多个平台。它通过分析你的代码,自动收集所有依赖,让你在没有 Python 环境的电脑上也能运行程序。
安装过程很简单,通过 pip 命令即可完成。
pip install pyinstaller如果想升级到最新版,可以运行:
pip install --upgrade pyinstaller如果下载速度慢,可以考虑使用国内镜像源,例如清华源:
pip install pyinstaller -i https://pypi.tuna.tsinghua.edu.cn/simple环境变量问题:如果安装后系统提示 'pyinstaller' 不是内部或外部命令,可以尝试用 python -m PyInstaller 来代替 pyinstaller 命令。
首先,通过命令行 (cmd 或终端) 进入到你的 Python 脚本所在的文件夹。
最基础的打包命令如下,它会生成一个包含所有依赖的文件夹:
pyinstaller your_script.py对于大多数情况,你可能更希望生成单个可执行文件,方便分发:
pyinstaller --onefile your_script.py打包完成后,在 dist 文件夹下就能找到生成的可执行文件。
PyInstaller 提供了丰富的参数来定制打包过程。
| 参数 | 简写 | 说明 |
|---|---|---|
--onefile | -F | 打包成单个可执行文件,便于分发。 |
--onedir | -D | 打包成一个目录,这是默认选项,包含exe和所有依赖文件,启动更快。 |
--windowed | -w | 隐藏控制台窗口。用于图形界面(GUI)程序,避免显示黑色命令行窗口。 |
--console | -c | 显示控制台窗口。这是默认行为,适合命令行程序。 |
--icon | -i | 指定程序图标。后面跟图标文件路径,如 --icon=myapp.ico。 |
--name | -n | 指定生成的文件名。如 --name=我的程序。 |
--add-data | 无 | 添加数据文件。用于打包图片、配置文件等非代码文件。 |
--hidden-import | 无 | 添加隐藏导入。当程序动态导入模块时,需用此参数指明。 |
--clean | 无 | 清理临时文件。在打包前清理PyInstaller的缓存,避免旧文件干扰。 |
对于使用 tkinter, PyQt 等库的图形界面程序,建议使用 --windowed 或 -w 参数来隐藏背后的命令行窗口。
pyinstaller --onefile --windowed your_gui_script.py如果你的程序依赖图片、配置文件等,需要用 --add-data 参数将它们打包进去。其语法为 源路径;目标路径 (Windows) 或 源路径:目标路径 (Linux/macOS)。
# 将当前目录下的 data 文件夹添加到打包后的根目录pyinstaller --onefile --add-data "data;data" your_script.py
在代码中访问资源:打包后,文件路径会变化。为了正确访问,需要在代码中做兼容处理:
import sysimport osdef resource_path(relative_path):"""获取资源的绝对路径,兼容开发环境和打包后环境"""if hasattr(sys, '_MEIPASS'):# 打包后,资源会被解压到 sys._MEIPASS 指向的临时文件夹return os.path.join(sys._MEIPASS, relative_path)return os.path.join(os.path.abspath("."), relative_path)# 使用示例config_path = resource_path("data/config.ini")
第一次打包后,会自动生成一个 .spec 文件。这是一个配置文件,你可以通过编辑它来实现更复杂的定制(如修改资源文件列表、设置打包选项等),然后使用以下命令进行打包:
pyinstaller your_script.spec打包后的文件可能会很大。可以尝试以下方法优化:
使用 --onedir 模式:单目录模式通常比单文件模式启动更快,也方便排查问题。
集成UPX:安装UPX (Ultimate Packer for eXecutables) 并用 --upx-dir 指定其路径,可以进一步压缩可执行文件。
ModuleNotFoundError (模块缺失):这是最常见的问题,通常是因为PyInstaller没有检测到某些动态导入的模块。解决方案是使用 --hidden-import 参数手动添加缺失的模块。
程序运行闪退:对于控制台程序,可以在代码末尾加上 input("按回车键退出...") 来暂停窗口,以便查看错误信息。
路径错误:打包后,__file__ 等变量的行为会改变,程序可能找不到文件。请务必使用上面提到的 resource_path 函数来处理资源文件路径。
跨平台问题:在Windows上生成的 .exe 文件无法在 macOS 或 Linux 上运行。你需要在该目标平台上重新执行打包过程。
PyInstaller 是一个将 Python 程序打包成独立可执行文件的强大工具。掌握其安装、基本命令和常用参数,就能轻松地将你的 Python 项目分享给任何人使用。
如下是在windows下使用pyinstaller打包生成的可直接运行的文件。

是不是挺实用的呢?欢迎留言交流~