python 打包成exe
你想要把 Python 脚本打包成可以在 Windows 系统上独立运行的 EXE 可执行文件,不需要用户安装 Python 环境就能直接使用。
一、最常用的打包工具:PyInstaller
PyInstaller 是 Python 打包最主流、最易用的工具,支持 Windows、macOS、Linux 系统,能将 Python 脚本和依赖库一起打包成单个文件或文件夹形式的可执行程序。
1. 安装 PyInstaller
首先打开命令提示符(CMD)或终端,执行以下命令安装:
bash
运行
pip install pyinstaller
如果安装速度慢,可以使用国内镜像源:
bash
运行
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyinstaller
2. 基础打包命令
假设你的 Python 脚本名为main.py,放在D:\my_project目录下:
步骤 1:进入脚本所在目录
bash
运行
cd D:\my_project
步骤 2:执行打包命令
基础版(生成文件夹形式):
bash
运行
pyinstaller main.py执行后会在当前目录生成
build(临时文件)、dist(最终程序)、main.spec(配置文件),EXE 文件在dist\main目录下。单文件版(推荐,仅生成一个 EXE):
bash
运行
pyinstaller -F main.py-F(全称--onefile)表示打包成单个 EXE 文件,生成的 EXE 在dist目录下。带图标版(美化 EXE):
准备一个
.ico格式的图标文件(如icon.ico),执行:bash
运行
pyinstaller -F -i icon.ico main.py-i(全称--icon)指定图标路径。 https://www.bejson.com/ui/icomaker/index.html无控制台版(GUI 程序专用):
如果你的脚本是 GUI 程序(如 Tkinter、PyQt、PySide),打包时去掉控制台窗口:
bash
运行
pyinstaller -F -w -i icon.ico main.py-w(全称--windowed)表示不显示控制台窗口。
3. 关键参数说明
4. 常见问题及解决
打包后 EXE 启动报错 “找不到模块”:
原因:PyInstaller 可能没识别到部分第三方库(如自定义模块、冷门库)。
解决:在打包命令中指定额外的路径,或修改
spec文件。示例(指定自定义模块路径):
bash
运行
pyinstaller -F --paths=D:\my_project\libs main.pyEXE 文件过大:
原因:打包了不必要的依赖库(如 Python 标准库中用不到的部分)。
解决:
使用虚拟环境,仅安装脚本必需的依赖;
用
-F打包后,用 UPX 工具压缩 EXE(需提前下载 UPX,指定路径):bash
运行
pyinstaller -F --upx-dir=D:\upx main.py
EXE 在其他电脑运行提示 “缺少 MSVCRxxx.dll”:
原因:缺少 Visual C++ 运行库。
解决:让用户安装 “Microsoft Visual C++ 2015-2022 Redistributable”,或打包时包含运行库(需手动复制)。
二、其他打包工具(备选)
如果 PyInstaller 不满足需求,可尝试以下工具:
cx_Freeze:轻量级,支持跨平台,适合简单脚本;
py2exe:仅支持 Python 2 和 Python 3 早期版本,基本淘汰;
Nuitka:将 Python 代码编译成 C 代码再打包,运行速度更快,但配置稍复杂。
总结
核心工具:优先使用 PyInstaller,命令简单、兼容性好,
pyinstaller -F -w main.py是 GUI 程序最常用的打包命令;关键参数:
-F(单文件)、-w(无控制台)、-i(图标)是最常用的三个参数;避坑要点:打包前清理缓存(
--clean)、用虚拟环境减少依赖、解决模块缺失问题需指定路径。
打包完成后,只需将dist目录下的 EXE 文件(或文件夹)发给用户,即可在无 Python 环境的 Windows 电脑上直接运行。
✅ 方法二(推荐发布方案)—— PyInstaller 打包成 exe(无控制台)
如果你打算给别人用,一定选这个
🔹 安装(只需一次)
pip install pyinstaller
🔹 打包命令(重点)
pyinstaller --onefile --windowed todo_app.py
或(等价):
pyinstaller -F -w todo_app.py
参数解释(记住这两个):
-F/--onefile→ 单个 exe-w/--windowed→ 不显示 CMD