Python 转 EXE 完整指南(PyInstaller)
**注意:**只能在 Windows 系统打包出 Windows 的 exe;Mac 只能打包 mac 程序,不能跨系统编译。
一、安装 PyInstaller
打开 cmd / PowerShell,执行:
bash
pip install pyinstaller
多 Python 版本环境下,使用:
bash
py -3 -m pip install pyinstaller
二、进入 py 文件目录
bash
# 示例,换成你自己的文件夹路径
cd D:\code\demo
三、打包命令(最常用)
3.1 基础打包命令
bash
pyinstaller -F test.py
bash
pyinstaller -F -w test.py
bash
pyinstaller -F -w -i app.ico test.py
3.2 参数说明
| 参数 | 说明 |
|---|---|
| -F | 打包成单个独立 exe 文件(推荐,方便发给别人);不带 -F 会生成一堆依赖文件夹 |
| -w | 运行时隐藏黑色控制台窗口(GUI 程序才加,print 打印的程序不要加) |
| -i xxx.ico | 设置 exe 图标 |
| -n myapp | 自定义 exe 名称 |
| --add-data | 附带图片/配置等静态资源(Windows 用分号 ; 分隔) |
四、打包完成后的产物
打包成功后,目录会生成 3 个东西:
-
build/:临时打包缓存(可删除)
-
dist/ :exe 在这里!
-
xxx.spec:打包配置文件(可删除)
直接去 dist 文件夹拿 exe,发给没有装 Python 的 Windows 电脑也能运行。
五、资源文件(图片、json、csv)打包重点
假设你有 config.json,需要打包进 exe:
bash
pyinstaller -F --add-data "config.json;." test.py
代码里读取资源路径要兼容打包:
python
import sys, os
def get_resource_path(relative_path):
if hasattr(sys, '_MEIPASS'):
base_path = sys._MEIPASS
else:
base_path = os.path.abspath(".")
return os.path.join(base_path, relative_path)
# 使用
file_path = get_resource_path("config.json")
六、常见坑
-
pyinstaller 不是内部命令 :把 Python 的 Scripts 目录加到环境变量,或者用
python -m PyInstaller test.py -
exe 体积很大:正常,内置 Python 解释器;可以用虚拟环境只装必要包来减小体积
-
双击 exe 一闪而过 :不要加 -w,或者在代码末尾加
input()暂停看报错 -
杀毒软件误报:PyInstaller 打包文件经常被 Windows Defender 报毒,属于误报
七、可视化工具:auto-py-to-exe
不想敲命令可以用图形界面版,底层还是 PyInstaller:
bash
pip install auto-py-to-exe
auto-py-to-exe
会打开网页窗口,点选配置一键打包。