一. pyinstaller和Nuitka使用感受
這次也是由於項目需要,要將python的代碼轉成exe的程序,在找了許久後,發現了2個都能對python項目打包的工具——pyintaller和nuitka。
這2個工具同時都能滿足項目的需要:
隱藏源碼。這裡的pyinstaller是通過設置key來對源碼進行加密的;而nuitka則是將python源碼轉成C++(這裡得到的是二進制的pyd文件,防止了反編譯),然後再編譯成可執行文件。
方便移植。用戶使用方便,不用再安裝什麼python啊,第三方包之類的。
2個工具使用後的最大的感受就是:
pyinstaller體驗很差!
一個深度學習的項目最後轉成的exe竟然有近3個G的大小(pyinstaller是將整個運行環境進行打包),對,你沒聽錯,一個EXE有3個G!
打包超級慢,啟動超級慢。
nuitka真香!
同一個項目,生成的exe只有7M!
打包超級快(1min以內),啟動超級快。
直接利用pip即可安裝:pip install Nuitka
下載vs2019(MSVS)或者MinGW64,反正都是C++的編譯器,隨便下。
對於第三方依賴包較多的項目(比如需要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能完美運行啦!
【python學習】
學Python的伙伴,歡迎加入新的交流【君羊】:1020465983
一起探討編程知識,成為大神,群裡還有軟件安裝包,實戰案例、學習資料
So lets take this picture , Ho
Hello, everyone ~ Im a panda