🐸 青蛙编程网
首页 / Python / 桌面客户端 / 7. 打包成 exe:PyInstaller

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 里取货;平台不互通,打包机 = 目标系统。

动手改

  1. 用 --onefile 和不加它的文件夹模式各打一次,比较启动速度、体积和"发给别人"时拷几个文件
  2. 给 exe 加图标:随便找张图转成 .ico(用免费的在线转换或 GIMP),--icon 后重新打包
  3. 终极验收:把 exe 拷到一台没装 Python 的电脑(或让家人电脑帮个忙)双击运行——跑通了,这一栈的核心承诺才算兑现

下一章:综合练习:迷你待办清单 🐸

📥 下载本章代码

ZIP 内含本章全部代码文件与说明,解压即用,与教程内容同步生成。