目前主流且稳定的 Python 打包方式主要有以下几种,按推荐顺序排列:
| 排名 | 工具 | 优点 | 缺点/坑点 | 适合场景 |
|---|---|---|---|---|
| 1 | PyInstaller | 兼容性最好、社区最大、文档最全 | 生成的 exe 偏大、启动稍慢 | 几乎所有场景(首选) |
| 2 | Nuitka | 启动速度最快、文件体积较小、接近原生性能 | 编译时间长、对依赖处理更严格 | 对启动速度敏感的项目 |
| 3 | cx_Freeze | 跨平台支持好、配置灵活 | 社区活跃度低、文档较老 | 需要高度自定义打包逻辑 |
| 4 | PyOxidizer | 极致体积优化、Rust 底层 | 配置复杂、生态不成熟 | 极致追求小体积的场景 |
| 5 | Shiv / PEX | 生成 .pex 文件(类似 jar),不生成 exe | 需要 Python 环境才能运行 | 服务器/内部工具分发(非桌面程序) |
绝大多数 Windows 桌面程序项目,PyInstaller 依然是首选。下面给出最实操的完整流程。
一、PyInstaller 完整打包流程
1. 环境准备
建议先创建干净的虚拟环境,避免依赖冲突:
# Windows
python -m venv pack-env
pack-env\Scripts\activate
# macOS/Linux
source pack-env/bin/activate
安装最新版(当前建议 ≥ 6.0):
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=lambda: messagebox.showinfo(, ))
btn.pack()
root.mainloop()
__name__ == :
main()

