Python 打包 EXE 文件 90MB?用 Nuitka 压到 12MB
一、PyInstaller 的痛点
1.1 体积太大
PyInstaller 的打包原理是将整个 Python 解释器(30-40MB)、所有依赖库以及标准库的大部分模块打包在一起。一个简单的 Hello World 程序打包后都要 20MB+,对于工具类软件来说体积过大。
1.2 启动慢
PyInstaller 打包的 EXE 启动流程包括解压临时文件到 _MEIxxxxxx 目录、加载 Python 解释器、执行 Python 代码。实测启动时间通常在 3-5 秒。
1.3 容易被误报
PyInstaller 打包的 EXE 经常被杀毒软件误报为病毒,原因包括自解压行为类似木马,且很多恶意软件也用 PyInstaller 打包。
1.4 性能没提升
PyInstaller 只是打包,代码还是解释执行,性能和直接运行 .py 文件一样。
二、Nuitka 方案
2.1 什么是 Nuitka
Nuitka 是一个 Python 到 C 的编译器,不是简单的打包工具。
核心原理:
Python 代码 → Nuitka → C 代码 → GCC/MSVC → 原生 EXE
2.2 安装
# 安装 Nuitka
pip install nuitka
# Windows 需要安装 C 编译器
# 方案 1:Visual Studio(推荐)
# 方案 2:MinGW64
2.3 基础使用
编译成单文件 EXE:
nuitka --onefile main.py
隐藏控制台窗口(GUI 程序):
nuitka --onefile --windows-disable-console main.py
2.4 优化建议
为了进一步减小体积和提升性能,可以使用以下参数:
nuitka --onefile --enable-optimizations=3 --windows-disable-console main.py
--enable-optimizations=3: 开启最高级别优化。--standalone: 生成独立目录(可选,便于调试)。
三、总结
相比 PyInstaller,Nuitka 将 Python 代码编译为 C 语言再编译为机器码,生成的 EXE 体积更小,启动速度更快,且不易被杀毒软件误报。虽然编译时间稍长,但对于发布最终产品而言是更优的选择。
| 特性 | PyInstaller | Nuitka |
|---|---|---|
| 打包方式 | 打包解释器 | 编译为 C/C++ |
| 体积 | 较大 (30MB+) |


