Python将代码打包为exe的6种主流方法全攻略
Python 代码打包为 exe 全攻略(2025–2026 主流方案)
目前 Python 程序打包成 Windows 可执行文件(.exe)的方案已经非常成熟,主要有以下 6 种主流/常用的方式:
| 排名 | 工具名称 | 是否打包解释器 | 文件体积 | 启动速度 | 兼容性 | 维护活跃度 | 推荐场景 | 难度 |
|---|---|---|---|---|---|---|---|---|
| 1 | PyInstaller | 是 | 中~大 | 较慢 | ★★★★★ | 非常活跃 | 几乎所有场景首选 | ★★☆ |
| 2 | Nuitka | 编译为 C → exe | 中~小 | 很快 | ★★★★☆ | 活跃 | 追求速度 & 体积小的项目 | ★★★ |
| 3 | PyOxidizer | Rust 打包 | 中~小 | 很快 | ★★★★ | 活跃 | 追求极致启动速度 & 现代化 | ★★★★ |
| 4 | cx_Freeze | 是 | 中 | 较慢 | ★★★★ | 一般 | 简单脚本、跨平台需求 | ★★☆ |
| 5 | py2exe | 是 | 中~大 | 较慢 | ★★★ | 较少维护 | 极老项目兼容(Python 3 支持一般) | ★★☆ |
| 6 | Shiv / PEX | 不打包,zipapp | 非常小 | 快 | ★★★★ | 活跃 | 命令行工具、分发给有 Python 环境的人 | ★★☆ |
2025–2026 最推荐的排序(按实际使用量与综合体验):
- PyInstaller → 稳定、生态好、文档完善
- Nuitka → 性能更好、体积更小(强烈推荐尝试)
- PyOxidizer → 极致追求启动速度与现代化
- cx_Freeze / Shiv(特定场景)
下面逐一详细说明原理、步骤和常见坑。
1. PyInstaller(使用量最大,推荐入门首选)
原理:把 Python 解释器 + 你的代码 + 所有依赖打包到一个文件夹或单个 exe 文件中。运行时会先解压到临时目录,然后执行。
基本步骤
# 1. 安装 pip install pyinstaller # 2. 简单打包(单个文件) pyinstaller -F your_script.py # 3. 常用参数组合(推荐) pyinstaller \ -F \ # 单文件 --noconsole \ # 无控制台窗口(GUI程序) --icon=app.ico \ # 设置图标 --add-data "images;images" \ # 附加文件夹(注意分号) --hidden-import=pkg_resources \ # 解决部分库隐藏导入问题 --clean \ # 清理临时文件 your_script.py
常见坑与解决方案
缺少模块(ModuleNotFoundError)→ 加 --hidden-import=模块名 或修改 .spec 文件
图片、配置文件找不到→ 使用 sys._MEIPASS 获取临时解压路径
import sys
import os
def resource_path(relative_path):
"""获取资源绝对路径(打包前后兼容)"""
base_path = getattr(sys, '_MEIPASS', os.path.dirname(os.path.abspath(__file__)))
return os.path.join(base_path, relative_path)文件体积过大→ 使用 UPX 压缩(--upx-dir)或排除不必要的依赖
杀毒软件误报→ 正常现象,建议用 --onedir 模式或提交白名单
2. Nuitka(性能更好、体积更小)
原理
把 Python 代码翻译成 C 代码,再编译成机器码。不依赖 Python 解释器,启动速度快,体积相对较小。
基本步骤
# 安装(推荐使用最新版) pip install -U nuitka # 推荐打包命令 python -m nuitka \ --standalone \ --onefile \ # 单文件(推荐) --windows-disable-console \ # 无控制台 --include-data-dir=images=images \ --plugin-enable=pylint-warnings \ --windows-icon-from-ico=app.ico \ your_script.py
优点对比 PyInstaller
- 启动速度明显更快(接近原生 C 程序)
- 最终文件体积通常更小
- 不需要解压到临时目录
缺点
- 编译时间较长(首次几分钟)
- 对一些动态特性(eval、exec、某些 metaclass)支持不完美
3. PyOxidizer(现代化、启动最快)
原理:使用 Rust 编写,把 Python 解释器 + 代码嵌入到一个原生可执行文件中,几乎无解压开销。
基本步骤(2025 年推荐方式)
安装 PyOxidizer
pip install pyoxidizer
创建项目
pyoxidizer init-executable myapp cd myapp
编辑 pyoxidizer.bzl(配置文件)
构建
pyoxidizer build
特点
- 启动速度极快(几乎无冷启动延迟)
- 支持嵌入资源、自定义 Python 解释器
- 适合追求极致体验的桌面应用
缺点
- 配置相对复杂
- 社区规模小于 PyInstaller
4. 快速对比总结表(2025–2026 实际体验)
| 需求 | 首选工具 | 次选工具 | 备注 |
|---|---|---|---|
| 快速上手、生态好 | PyInstaller | cx_Freeze | 文档最多、问题最容易搜到 |
| 追求启动速度 & 体积 | Nuitka | PyOxidizer | Nuitka 更成熟,PyOxidizer 更现代 |
| 命令行工具、分发给运维 | Shiv / PEX | PyInstaller | 不打包解释器,体积最小 |
| GUI 程序,无控制台 | PyInstaller -F --noconsole | Nuitka --onefile --windows-disable-console | — |
| 极致性能 | Nuitka / PyOxidizer | — | — |
5. 通用避坑指南(强烈建议收藏)
路径问题(最常见坑)
- 永远不要用相对路径
- 使用
resource_path()函数(见 PyInstaller 示例)
第三方库兼容性
- PyQt5/PySide6 → 必须加
--hidden-import - pandas/numpy → 通常自动识别,但有时需加
--include-data-dir - tkinter → PyInstaller 一般没问题,Nuitka 需要额外配置
图标不生效
- 必须是
.ico格式(Windows) - 建议 256×256 多尺寸 ico 文件
杀毒报毒
- 单文件模式最容易被报
- 建议用
--onedir模式分发,或提交给杀毒厂商加白
版本管理
- 建议用虚拟环境打包
- 记录
requirements.txt和 Python 版本
测试建议
- 在干净的 Windows 虚拟机上测试(无 Python 环境)
- 测试不同杀毒软件的表现
总结:2025–2026 年打包推荐策略
- 普通脚本 / 小工具 → PyInstaller 单文件
- 对启动速度有要求 → Nuitka(强烈推荐)
- 追求极致现代化 → PyOxidizer
- 命令行工具给别人用 → Shiv / PEX
- 老项目兼容 → cx_Freeze 或 py2exe
到此这篇关于Python将代码打包为exe的6种主流方法全攻略的文章就介绍到这了,更多相关Python代码打包为exe内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
pandas如何将dataframe中的NaN替换成None
这篇文章主要介绍了pandas如何将dataframe中的NaN替换成None问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教2023-08-08
TensorFlow2.4完成Word2vec词嵌入训练方法详解
这篇文章主要为大家介绍了TensorFlow2.4完成Word2vec词嵌入训练方法详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2022-11-11


最新评论