在 Python 的世界里,代码打包与发布一直是开发者关注的重要话题。前面我们介绍了Pyinstaller的使用,尽管 PyInstaller 是最常用的工具之一,但对于性能、安全性、兼容性有更高要求的项目,Nuitka 正迅速成为更优的选择。本文将全面介绍 Nuitka 的功能、使用方法、优势与实践技巧,帮助你掌握这一强大的 Python 编译工具。
关于 Nuitka
Nuitka 是一个将 Python 源码编译为 C/C++ 代码,并进一步生成原生可执行文件的工具。它兼容所有主流的 Python 版本(CPython 2.6 - 3.x),并可生成跨平台的独立可执行文件(支持 Windows、Linux、macOS)。
Nuitka 的主要特点包括:
- 将 .py 文件编译为真正的机器码,而非简单封装 pyc
- 提升运行性能(通常比原生 Python 更快)
- 更好的代码混淆与保护机制
- 生成不依赖 Python 解释器的可执行文件
Nuitka的优势
-
💨 提升执行效率
因为 Python 被编译成了底层 C 语言,Nuitka 打包后的程序在多数场景下能获得 10%~500% 不等的性能提升,尤其是大量循环、数值计算等 CPU 密集型任务。 -
🔐 源码保护能力强
不同于 PyInstaller 是将 .pyc 打包进去(仍可反编译),Nuitka 直接把 .py 编译为机器代码,无法被轻易还原为原始代码,极大增强了源码保护。 -
📦 真正脱离 Python 解释器
使用 Nuitka 打包的程序可以在没有 Python 环境的机器上直接运行,适用于部署闭源商业项目、工具应用等。 -
📚 兼容性强,支持第三方库
Nuitka 兼容大部分第三方库,如 requests, numpy, pandas, PyQt5, Tkinter, 等等,甚至支持 C 扩展模块与插件机制。
使用Nuitka
首先还是安装,nuitka的安装稍微麻烦些。由于Nuitka不具备直接编译功能,因此还需要安装C编译器:
Windows
:安装 mingw(默认使用 Visual Studio Build Tools,太过庞大,嫌弃!)Linux
:确保已安装 gcc 和 g++macOS
:安装 clang,可通过 Xcode 安装
我这里使用的是windows,就安装mingw。这个包的下载都超级慢,我就直接放个网盘分享地址:
下载后解压,将其放到特定位置,然后配置环境变量即可。
最后通过pip命令即可安装
pip install nuitka -i https://pypi.mirrors.ustc.edu.cn/simple/
编写一个基本的GUI程序,这里就以前面写的计算器例子来演示,执行打包
nuitka --mingw --standalone --onefile main.py
完成第一阶段的编译后,又提示还需要安装一个 winlibs
包,这个也是编译需要的依赖包。我就一起放在上面的分享目录中了。注意看提示的内容,如果你的版本和我不一致的话,可以复制该链接,然后使用迅雷下载,放到上面指定的目录里面就行。
注: 将下载的压缩包内的
mingw64
文件夹复制到C:\Users\usename\AppData\Local\Nuitka\Nuitka\Cache\downloads\gcc\x86_64\14.2.0posix-19.1.1-12.0.0-msvcrt-r2中,这里原本是个空文件夹
【添加包】
系统提示需要添加tk-inter包进去,修改一下命令后再执行:
nuitka --mingw --standalone --onefile --enable-plugin=tk-inter main.py
可以看到,使用功能Nuitka打包的程序仅5M大小,比Pyinstaller又小了2M的体积。
和pyinstaller一样,默认会启动一个控制台,也没有图标,下面我们来优化打包命令
优化打包
将打包命令修改为如下:
nuitka --mingw --standalone --onefile --windows-console-mode=disable --enable-plugin=tk-inter --include-data-file=logo.png=logo.png --windows-icon-from-ico=logo.ico main.py
说明:
mingw
:使用 MinGW 作为 C 编译器standalone
: 打包所有依赖,无需 Python 环境onefile
:生成单个可执行文件windows-console-mode
:是否需要关闭控制台enable-plugin=tk-inter
:启用插件(例如 GUI 框架支持)include-data-file
:附加文件到打包文件中,否则无法显示图标windows-icon-from-ico
程序图标设置
现在就能看到最终的效果了,程序程序图标也出来了,运行正常
Nuitka的打包过程没有生成配置文件,对于复杂的打包,建议写成脚本来执行
总结
使用Nuitka打包的程序体积会更小些,这是因为编译为C代码的缘故。不过编译时间会更久,对于大型项目尤其明显,我之前公司项目使用这个编译,每次都要3~5分钟。
安装过程相比pyinstaller稍微麻烦一点,不过这不是问题。
多学习一种打包方式,对于以后得工作总是有帮助的。