Nuitka,Python 打包神器!
pyinstaller 和 Nuitka 使用感受
1.1 使用需求
這次也是由於項目需要,要將 python 的代碼轉成 exe 的程序,在找了許久後,發現了 2 個都能對 python 項目打包的工具——pyintaller 和 nuitka。
這 2 個工具同時都能滿足項目的需要:
-
隱藏源碼。這裏的 pyinstaller 是通過設置 key 來對源碼進行加密的;而 nuitka 則是將 python 源碼轉成 C++(這裏得到的是二進制的 pyd 文件,防止了反編譯),然後再編譯成可執行文件。
-
方便移植。用戶使用方便,不用再安裝什麼 python 啊,第三方包之類的。
1.2 使用感受
2 個工具使用後的最大的感受就是:
-
pyinstaller 體驗很差!
-
一個深度學習的項目最後轉成的 exe 竟然有近 3 個 G 的大小(pyinstaller 是將整個運行環境進行打 - 包),對,你沒聽錯,一個 EXE 有 3 個 G!
-
打包超級慢,啓動超級慢。
-
nuitka 真香!
-
同一個項目,生成的 exe 只有 7M!
-
打包超級快(1min 以內),啓動超級快。
Nuitka 的安裝及使用
2.1 nuitka 的安裝
-
直接利用 pip 即可安裝:pip install Nuitka
-
下載 vs2019(MSVS) 或者 MinGW64,反正都是 C++ 的編譯器,隨便下。
2.2 使用過程
對於第三方依賴包較多的項目(比如需要 import torch,tensorflow,cv2,numpy,pandas,geopy 等等)而言,這裏最好打包的方式是隻將屬於自己的代碼轉成 C++,不管這些大型的第三方包!
以下是我 demo 的一個目錄結構(這裏使用了 pytq5 框架寫的界面):
├─utils//源碼1文件夾├─src//源碼2文件夾├─logo.ico//demo的圖標└─demo.py//main文件
使用以下命令(調試)直接生成 exe 文件:
nuitka --standalone --show-memory --show-progress --nofollow-imports --plugin-enable=qt-plugins --follow-import-to=utils,src --output-dir=out --windows-icon-from-ico=./logo.ico demo.py
這裏簡單介紹下我上面的 nuitka 的命令:
-
--standalone:方便移植到其他機器,不用再安裝 python
-
--show-memory --show-progress:展示整個安裝的進度過程
-
--nofollow-imports:不編譯代碼中所有的 import,比如 keras,numpy 之類的。
-
--plugin-enable=qt-plugins:我這裏用到 pyqt5 來做界面的,這裏 nuitka 有其對應的插件。
-
--follow-import-to=utils,src:需要編譯成 C++ 代碼的指定的 2 個包含源碼的文件夾,這裏用, 來進行分隔。
-
--output-dir=out:指定輸出的結果路徑爲 out。
-
--windows-icon-from-ico=./logo.ico:指定生成的 exe 的圖標爲 logo.ico 這個圖標,這裏推薦一個將圖片轉成 ico 格式文件的網站(比特蟲)。
-
--windows-disable-console:運行 exe 取消彈框。這裏沒有放上去是因爲我們還需要調試,可能哪裏還有問題之類的。
經過 1min 的編譯之後,你就能在你的目錄下看到:
├─utils//源碼1文件夾├─src//源碼2文件夾├─out//生成的exe文件夾
├─demo.build
└─demo.dist
└─demo.exe//生成的exe文件├─logo.ico//demo的圖標└─demo.py//main文件
當然這裏你會發現真正運行 exe 的時候,會報錯:no module named torch,cv2,tensorflow 等等這些沒有轉成 C++ 的第三方包。這裏需要找到這些包(我的是在 software\python3.7\Lib\site-packages 下)複製(比如 numpy,cv2 這個文件夾)到 demo.dist 路徑下。
至此,exe 能完美運行啦!
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/lI10U15drzwEh2JNa7K69A