Python 代码打包为 EXE 完整指南
目前最主流、最稳定的几种打包方式对比:
| 排名 | 工具 | 优点 | 缺点/坑点 | 适合场景 |
|---|---|---|---|---|
| 1 | PyInstaller | 兼容性最好、社区最大、文档最全 | 生成的 exe 偏大、启动稍慢 | 几乎所有场景(首选) |
| 2 | Nuitka | 启动速度最快、文件体积较小、接近原生性能 | 编译时间长、对依赖处理更严格 | 对启动速度敏感的项目 |
| 3 | cx_Freeze | 跨平台支持好、配置灵活 | 社区活跃度低、文档较老 | 需要高度自定义打包逻辑 |
| 4 | PyOxidizer | 极致体积优化、Rust 底层 | 配置复杂、生态不成熟 | 极致追求小体积的场景 |
| 5 | Shiv / PEX | 生成 .pex 文件(类似 jar),不生成 exe | 需要 Python 环境才能运行 | 服务器/内部工具分发(非桌面程序) |
绝大多数人(尤其是 Windows 桌面程序)首选:PyInstaller。
下面给出最实操的完整流程(以 PyInstaller 为主,附 Nuitka 补充)。
一、PyInstaller 完整打包流程(推荐)
步骤 1:环境准备
# 建议使用干净的虚拟环境
python -m venv pack-env
# Windows
pack-env\Scripts\activate
# macOS/Linux
source pack-env/bin/activate
# 安装最新版
pip install --upgrade pyinstaller
步骤 2:写一个最简单的测试程序(main.py)
import sys
import tkinter as tk
from tkinter import messagebox
def main():
root = tk.Tk()
root.title("我的第一个打包程序")
root.geometry("400x300")
label = tk.Label(root, text="Hello from EXE!", font=("微软雅黑", 16))
label.pack(pady=50)
btn = tk.Button(root, text="点我", command=: messagebox.showinfo(, ))
btn.pack()
root.mainloop()
__name__ == :
main()

