在 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稍微麻煩一點,不過這不是問題。
多學習一種打包方式,對于以后得工作總是有幫助的。