1. Nuitka vs PyInstaller
| 核心维度 | PyInstaller | Nuitka | 胜出者 |
|---|---|---|---|
| 源码安全性 | 极差(等于裸奔) 。使用 pyinstxtractor 等工具,1分钟就能逆向提取出几乎完整的源码。 |
极高。代码已经被编译成了底层机器码,想逆向?请去啃汇编语言。商业项目首选。 | 🏆 Nuitka |
| 启动速度 | 慢。每次运行都需要在后台解压庞大的环境文件,有明显的延迟感。 | 极快。无需解压,直接执行机器码,基本做到秒开。 | 🏆 Nuitka |
| 运行性能 | 标准 Python 速度,没有任何提升。 | 翻译成 C 后,部分逻辑(尤其是循环、运算)有显著的性能提升。 | 🏆 Nuitka |
| 打包速度 | 快。几秒或几十秒搞定。 | 慢。需要调用 C 编译器进行深度编译,大项目可能需要几十分钟。 | 🏆 PyInstaller |
| 易用性与兼容性 | 开箱即用,第三方库兼容性极好。 | 配置相对复杂,部分涉及动态反射或魔法操作的库需要引入额外的 Plugin。 | 🏆 PyInstaller |
2. 安装 Nuitka
除了安装 Nuitka 本身,由于需要编译 C 代码,在 Windows 上你通常还需要一个 C 编译器(安装 Nuitka 时,它会自动提示并帮你下载标准的 MinGW64 编译器,非常贴心)。
pip install nuitka
基础打包命令
最简单的打包命令,生成一个包含依赖的独立文件夹:
python -m nuitka --standalone your_script.py
进阶打包
在实际的企业级应用中(比如结合了 PyQt5 GUI 和 Flask 后端),我们往往需要更精细的控制。以下是一个非常成熟的实战命令:
python -m nuitka --standalone --onefile --windows-console-mode=disable --enable-plugin=pyqt5 --include-data-dir=static=static --windows-icon-from-ico=favicon.ico main.py
参数拆解:
-
--standalone: 独立运行模式,打包所有依赖。 -
--onefile: 打包成一个单一的.exe文件(干净利落)。 -
--windows-console-mode=disable: 运行时隐藏丑陋的黑色控制台窗口(GUI 程序必备)。 -
--enable-plugin=pyqt5: 启用 PyQt5 插件,完美解决各种 Qt 依赖缺失问题。 -
--include-data-dir=static=static: 静态资源打包(把前端页面、图片等塞进程序里)。 -
--windows-icon-from-ico=favicon.ico: 设置高大上的程序图标。
