以下是 2025–2026 年最实用的 6 种 Python 脚本打包成 Windows EXE 可执行文件 的主流方法,按易用性 × 普及度 × 实际场景排序。
| 排名 | 方法/工具 | 易用性 | 生成文件大小 | 启动速度 | 运行速度 | 反编译难度 | 典型场景 | 推荐指数 (★5) |
|---|---|---|---|---|---|---|---|---|
| 1 | PyInstaller | ★★★★★ | 大(onefile 常 50–300MB) | 慢(几秒~几十秒) | 普通 | 低 | 绝大多数 GUI、小工具、初次尝试 | ★★★★★ |
| 2 | auto-py-to-exe | ★★★★★ | 同 PyInstaller | 同上 | 普通 | 低 | 零基础用户、GUI 操作打包 | ★★★★☆ |
| 3 | Nuitka | ★★★★☆ | 中~小 | 快 | 明显更快(1.5–4×) | 中~高 | 性能敏感、数值计算、想保护代码 | ★★★★☆ |
| 4 | cx_Freeze | ★★★★ | 中 | 较快 | 普通 | 低~中 | 追求启动快、跨平台、自定义 setup.py | ★★★☆☆ |
| 5 | PyOxidizer | ★★☆☆☆ | 小~中 | 非常快 | 普通~快 | 中~高 | 极致体积/启动速度、Rust 爱好者 | ★★☆☆☆ |
| 6 | Shiv / PEX | ★★★ | 小(.pyz) | 普通 | 普通 | 低 | 内部工具分发、需要 Python 环境 | ★★☆☆☆ |
1. PyInstaller(目前最推荐的起点)
最成熟、兼容性最好、社区最大。
# 安装
pip install pyinstaller
# 最常用单文件模式(推荐)
pyinstaller -F --noconsole your_script.py
# 带图标 + 隐藏控制台 + 加数据文件
pyinstaller -F --noconsole --icon=app.ico \
--add-data "images;images" \
--add-data "config.json;." \
--name "MyTool" your_script.py
# 调试时先用文件夹模式找问题
pyinstaller -D your_script.py
常见问题解决:
- 缺少模块 →
--hidden-import=numpy.core._methods等 - 数据文件丢失 →
--add-data或修改.spec文件 - 杀毒误报 → 用
--onedir模式,或提交样本给杀软厂商
2. auto-py-to-exe(图形界面,最适合新手)
本质是 PyInstaller 的 GUI 封装。
pip install auto-py-to-exe
auto-py-to-exe
优点:点点鼠标就能出 exe,适合演示、快速交付给非技术用户。
缺点:Python 3.11+ 有时兼容性问题,建议用 3.9 或 3.10。
3. Nuitka(追求速度与保护代码的首选)
真正把 Python 转成 C → 编译成原生可执行文件。
# 安装(需要 C 编译器:MSVC / MinGW)
pip install nuitka
# 推荐写法(单文件 + 插件)
python -m nuitka --standalone --onefile \
--enable-plugin=tk-inter \
--windows-disable-console \
--windows-icon-from-ico=app.ico \
--include-data-dir=assets=assets \
your_script.py
2025–2026 亮点:
- 运行速度可达 CPython 的 2–4 倍(尤其 numpy/pandas/torch 代码)
- 反编译难度明显高于 PyInstaller
- 启动速度通常比 PyInstaller 快很多
缺点:打包时间长(复杂项目可能几分钟到十几分钟)。
4. cx_Freeze(启动快、体积相对友好)
pip install cx-freeze
# 创建 setup.py
from cx_Freeze import setup, Executable
setup(
name="MyApp",
version="1.0",
executables=[Executable("main.py", base="Win32GUI")],
options={
"build_exe": {
"packages": ["numpy", "pandas"],
"include_files": ["config.json", "images/"],
"excludes": ["tkinter"] # 如不需要
}
}
)
# 打包
python setup.py build
# 或直接生成单文件(需额外配置)
优点:启动比 PyInstaller 快很多,目录结构清晰。
缺点:配置比 PyInstaller 稍麻烦。
5. PyOxidizer(极致启动速度 + 小体积)
Rust 编写,嵌入式 Python 解释器。
目前(2026)更适合有 Rust 经验的开发者,或对启动时间、体积有极端要求的企业项目。
# pyoxidizer.bzl 配置示例(简化)
[[python_distribution]]
name = "embedded"
python_exe = "python.exe"
[[exe]]
name = "myapp"
script = "main.py"
优点:启动极快、内存占用低、可做到较小单文件。
缺点:学习曲线陡峭,生态远不如 PyInstaller。
6. Shiv / PEX(.pyz 格式,需目标机器有 Python)
不是真正的 exe,但可以作为补充方案。
pip install shiv
shiv -c myapp -o myapp.pyz .
优点:文件很小,跨平台。
缺点:目标机器必须安装 Python。
快速选择指南(2026 视角)
| 你想要什么 | 推荐工具顺序 |
|---|---|
| 最简单、最快上手 | auto-py-to-exe → PyInstaller |
| GUI 程序、给普通人用 | PyInstaller + –noconsole –onefile |
| 性能敏感、数值/AI 类程序 | Nuitka(–onefile) |
| 启动时间敏感 | cx_Freeze 或 Nuitka |
| 极致体积 + 启动速度 | PyOxidizer 或 Nuitka |
| 内部工具、服务器分发 | Shiv / PEX |
最推荐的入门组合(2026):
- 先用 auto-py-to-exe 快速出第一个 exe
- 遇到问题后转 PyInstaller 命令行精细控制
- 如果对速度/保护有要求 → 切换 Nuitka
有具体项目类型(GUI、命令行、带 numpy/pandas、带 PyQt/tkinter、pygame 等)可以告诉我,我可以给出更精确的打包参数和常见坑的解决方案~