7. 打包成 exe:PyInstaller
这是什么:PyInstaller(Python 冻结打包器)把你的 .py 连同 Python 解释器、Tkinter 依赖一起压成一个 .exe(Windows)/ 可执行文件(macOS/Linux)——对方电脑没装 Python 也能双击运行。
为什么用:第 6 章的记事本再好,发给朋友意味着让 ta 装 Python、装环境、开命令行——分享链在第一步就断了。打包成 exe,"发个软件"和"发个文件"一样简单,这一栈"把 Python 带出终端"的叙事到这才算闭环。
如何用:在虚拟环境里 pip install pyinstaller,一条命令冻结第 6 章记事本,dist/ 里取出 exe 发给别人。
第 0 步:在虚拟环境里装(强烈建议)
回忆 虚拟环境 venv:PyInstaller 会把当前环境里能看到的东西尽量打进包。全局环境装过一堆库?全都被拖进 exe,体积翻倍还带冗余。所以:
python -m venv build-env
build-env\Scripts\activate # Windows(macOS/Linux 用 source build-env/bin/activate)
pip install pyinstaller
Tkinter 是标准库,不用额外装任何界面依赖——这正是选它入门 GUI 的实惠:打包链最短。
冻结:一条命令
把第 6 章记事本存为 notepad.py,在它所在目录执行:
pyinstaller --onefile --windowed --name 迷你记事本 notepad.py
你会看到:命令行刷一堆 INFO 日志,最后在当前目录多出三个东西:
| 产物 | 是什么 | 处理方式 |
|---|---|---|
dist/迷你记事本.exe |
真正的成品,单文件约 10~20 MB | 发给别人就给它 |
build/ |
打包过程的中间物 | 可删 |
notepad.spec |
打包配置说明文件 | 可留——复杂打包直接编辑它 |
| 参数 | 作用 |
|---|---|
--onefile |
压成一个 exe(不加则给一个文件夹,exe + 一堆 dll) |
--windowed |
运行时不带黑色控制台窗(GUI 程序必备;不加它,用户面前永远挂个 cmd) |
--name 迷你记事本 |
exe 的文件名 |
--icon=app.ico |
换成自定义图标(必须是 .ico 格式,.png 不行) |
--onefile 的代价:双击后要先自我解压,启动比文件夹模式慢一两秒——正常现象。
平台铁律:exe 只能在 Windows 上打
PyInstaller 不是跨平台编译器:在 Windows 打出来的是 exe,在 macOS 打出来的是 Mac 程序,互相不能转。没有 Windows 电脑就只能把源码和运行说明发给对方(或借一台)。macOS 给 Intel/Apple 芯片通用包加 --target-architecture=universal2。
常见翻车现场
| 现象 | 原因与解法 |
|---|---|
| 杀毒软件把 exe 报毒删除 | --onefile 自解压行为常触发误报;改用文件夹模式、或提交杀毒厂商白名单,属打包工具老问题 |
| 双击闪退、看不到报错 | 先用不带 --windowed 的版本在终端里跑一次,控制台会留下真实报错(缺文件、路径错都会现形) |
| 换台电脑报缺 DLL | 目标机缺 VC++ 运行库,装 Microsoft Visual C++ Redistributable(2015–2022 版)即可 |
PyInstaller 尚不支持 Python 3.x |
打包工具对新 Python 版本的适配常慢半拍:把报错贴给搜索引擎确认支持矩阵,必要时用 venv 建一个它支持的老版本 Python 专用于打包(打包环境和你开发环境可以不同) |
版本说明:本章基线为 PyInstaller 6.x + Python 3.15(2026-10 核对),
pip install pyinstaller永远装最新;两件套的适配关系滚动变化,发稿后如遇新版 Python,以 PyInstaller 官方发布说明为准。
记忆口诀:venv 里装、一条 pyinstaller、onefile 单文件、windowed 去黑框、dist 里取货;平台不互通,打包机 = 目标系统。
动手改
- 用
--onefile和不加它的文件夹模式各打一次,比较启动速度、体积和"发给别人"时拷几个文件 - 给 exe 加图标:随便找张图转成
.ico(用免费的在线转换或 GIMP),--icon后重新打包 - 终极验收:把 exe 拷到一台没装 Python 的电脑(或让家人电脑帮个忙)双击运行——跑通了,这一栈的核心承诺才算兑现
下一章:综合练习:迷你待办清单 🐸