編程學習網 > 編程語言 > Python > python打包教程(Python 打包工具 Nuitka)
2023
06-29

python打包教程(Python 打包工具 Nuitka)

Nuitka 是一個用 Python 編寫的 Python 編譯器。完全兼容 Python 2.6、2.7、3.4、3.5、3.6、3.7、3.8、3.9、3.10 和 3.11 版本,它以一種極其兼容的方式將未編譯的代碼和已編譯的代碼一起執行。Nuitka 將 Python 模塊翻譯成 C 級程序,然后使用 libpython 和自己的靜態 C 文件,以 CPython 的方式執行。


為什么使用 Nuitka

打包體積小。

性能高,Nuitka 可以顯著提高 Python 代碼的性能,將其編譯為二進制格式,可以比解釋代碼更有效地執行。這可以帶來更快的執行時間和更好的資源利用率。

安全性,將 Python 代碼編譯成二進制格式可以使攻擊者更難進行逆向工程或修改代碼。

Nuitka 安裝和環境

安裝

> pip install nuitka
校驗是否安裝成功:

> python -m nuitka --version
1.7rc4
Commercial: None
Python: 3.9.10 (tags/v3.9.10:f2f3f53, Jan 17 2022, 15:14:21) [MSC v.1929 64 bit (AMD64)]
...

環境

Python:2.6、2.7、3.4、3.5、3.6、3.7、3.8、3.9、3.10 和 3.11 任一版本

C編譯器:推薦使用 mingw64。其他的可參考官方文檔(https://nuitka.net/de_DE/doc/user-manual.html#requirements)

我當前的環境如下:

> python --version
Python 3.9.10
> gcc --version
gcc.exe (x86_64-win32-seh-rev0, Built by MinGW-W64 project) 8.1.0

Nuitka 打包

第一次使用時會提示下載一個 C 語言緩存工具(以加速重復編譯生成的 C 代碼)和一個基于 MinGW64 的 C 語言編譯器。都輸入 yes 即可。

使用一個實際的項目來演示如何打包,項目是:

QtComMate(https://github.com/nixgnauhcuy/QtComMate),基于 pyqt6 的一個串口工具。

項目結構如下:

├─docs
│  ├─images
│  └─translations
└─src
    │  config.py
    │  main.py
    │  main.ui
    │  requirements.txt
    │  resources_rc.py
    │  serialport.py
    │  serialport_combobox.py
    │  Ui_main.py
    │
    └─Resources
        ├─icon
        │      main.ico
        ├─img
        ├─sty
        └─translations
上述我省略了一些無關緊要的文件,可以看出主程序是 ./src/main.py 圖標在 ./src/Resources/icon/main.ico 中。

確認了主入口和圖標位置后,開始打包,輸入下述命令:

> python -m nuitka --mingw64 --standalone --show-memory --enable-plugin=pyqt6 --nofollow-import-to=numpy --nofollow-imports --remove-output --disable-console --windows-icon-from-ico=.\src\Resources\icon\main.ico --output-dir=out  .\src\main.py
等待命令執行完,過程會稍微要點時間,并且會占用大量 CPU 資源,執行完畢后,會在當前目錄下輸出 out/main.dist 文件夾,這樣就打包成功了。


簡單運行下,


為了對比一下 pyinstaller,輸入下述命令使用 pyinstaller 打包:

> pyinstaller -D -w -i .\src\Resources\icon\main.ico .\src\main.py
pyinstaller 會在當前目錄生成 dist 和 build 文件,對比一下兩者打包后的大?。?/span>


可以看出 Nuitka 會比 pyinstaller 打包后的體積小。

打包命令各參數解析:

> python -m nuitka --mingw64 --standalone --show-memory --enable-plugin=pyqt6 --nofollow-import-to=numpy --nofollow-imports --remove-output --disable-console --windows-icon-from-ico=.\src\Resources\icon\main.ico --output-dir=out  .\src\main.py

--mingw64:在 Windows 上強制使用 MinGW64。

--standalone:啟用輸出的獨立模式。這使你可以將創建的二進制文件傳輸到其他機器上,而不用使用現有的 Python 安裝。這也意味著它將變得很大。

--show-memory:提供內存信息和統計數據。

--enable-plugin:啟用的插件。必須是插件名稱。

--nofollow-import-to:在打包過程中忽略指定的 Python 軟件包。

--nofollow-imports:不導入任何模塊。

--remove-output:打包完成后刪除 build 目錄。

--disable-console:禁用控制臺窗口。

--windows-icon-from-ico:可執行文件的圖標路徑。

--output-dir:打包的輸出文件夾路徑。

如果要了解其他的命令參數可以輸入:

> python -m nuitka --help
Usage: __main__.py [--module] [--run] [options] main_module.py

Options:
  --help                show this help message and exit
  --version             Show version information and important details for bug
                        reports, then exit. Defaults to off.
  --module              Create an extension module executable instead of a
                        program. Defaults to off.

....

以上就是python打包教程(Python 打包工具 Nuitka)的詳細內容,想要了解更多Python教程歡迎持續關注編程學習網。

掃碼二維碼 獲取免費視頻學習資料

Python編程學習

查 看2022高級編程視頻教程免費獲取