Nuitka 把 Python 源代码翻译成 C 代码,再交给 C 编译器生成可执行文件或扩展模块。它的目标不是彻底改变 Python,而是尽量保持兼容性,同时减少运行时开销。可以看成是 CPython 的“加速器/打包器”的合体。
Nuitka 解决了哪些痛点(为什么想用它)
- • 想发可执行程序给不会装 Python 的用户?–standalone 或 –onefile 可以把依赖打包好,直接分发。
- • 想把关键模块做成扩展模块(.so/.pyd),提高性能或保护源码?–mode=module 可以把 .py 编译成扩展。
- • 想要比纯解释器更快一点?通过编译和优化,某些 CPU 密集型或调用频繁的场景能得到明显加速(见 pystone 测试)。
安装(快速上手)
- • 推荐方式(绝大多数平台):
- • pip 安装:python -m pip install nuitka
- • 检查版本:python -m nuitka –version
一般只要能调用系统 C 编译器(gcc/clang 或 MSVC)就能工作。Nuitka 支持 Python 2.6/2.7 和 Python 3.4–3.13(不同平台有些细节依赖)。
基本使用(最常见命令)
- • 把脚本编译成加速版(保留原有脚本名,但是会生成一个加速目标):
- • python -m nuitka your_script.py
- • 递归跟随导入并把程序编译成独立可执行目录(推荐用于分发):
- • python -m nuitka –standalone –follow-imports your_script.py
- • 生成单文件可执行(会在运行时解包):
- • python -m nuitka –onefile your_script.py
- • 编译生成扩展模块(替代 some_module.py):
- • python -m nuitka –mode=module some_module.py
- • 直接运行编译并执行(方便调试):
- • nuitka-run –run your_script.py
小贴士:总是用 -m nuitka 的方式来调用,这样不会用错解释器导致莫名的 SyntaxError/ImportError。
常见场景与参数
|
目的 |
常用选项 |
说明 |
|
本地加速运行 |
python -m nuitka script.py |
快速编译并用 libpython 动态链接执行,减少部分开销 |
|
分发到没有 Python 的机器 |
–standalone |
会生成 .dist 目录,把依赖文件拷过去就能跑 |
|
生成单文件可执行 |
–onefile |
单文件方便发放,但运行时要解包,调试不便 |
|
做成扩展模块 |
–mode=module |
输出 .so/.pyd,给 Python 导入使用(适合保护源码或局部加速) |
|
包管理集成 |
bdist_nuitka / pyproject.toml 配置 |
与 setuptools/pyproject 集成,生成 wheel 或 Nuitka 构建产物 |
|
包含数据文件 |
–include-data-files / –include-package-data |
standalone/onefile 时,手动或自动包含资源文件 |
优点(为什么吸引人)
- • 高兼容性:旨在保持与 CPython 行为一致,支持大量标准库和第三方包。
- • 灵活:既能做“加速器”,也能做“打包器”,适用面广。
- • 多平台:支持 Windows、Linux、macOS、FreeBSD 等,能构建不同架构的目标。
缺点 / 限制(要注意的坑)
- • 不是万能加速器:并非所有代码都会变快,I/O、网络型代码受限于本身特性,性能提升视具体场景而定。
- • 编译慢、占资源:把 Python → C → 编译 的过程需要大量时间和内存,复杂项目编译可能很慢,需要 ccache、更多 RAM 或优化编译参数。
- • standalone 的依赖复杂:打包第三方扩展(DLL/.so)、数据文件需要手动处理或依赖 Nuitka 插件配置,某些复杂包(列如新版本的 NumPy)可能需要额外调整。
小结
如果你需要把 Python 程序交付给不懂安装 Python 的用户、想保护源码、或者想对关键代码做必定加速与封装,Nuitka 是个超级值得一试的工具。学习曲线比 pyinstaller/py2exe 要陡一些(由于涉及 C 编译和依赖细节),但兼容性与性能潜力让它很值得投入时间。对工程化、CI 构建、跨平台发布有需求的团队尤其适合。
项目地址:https://github.com/Nuitka/Nuitka

十次九次不成功
前期配置很麻烦
py2exe可以集成入IDE。
第一次使用就失败了,弄了很多次都没搞好,放弃了
向你学习👍