Python 的打包神器 — Nuitka!
一. 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能完美執行啦!
連結:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70013542/viewspace-2935086/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Nuitka 打包python專案UIPython
- nuitka: Python程式碼打包為exeUIPython
- 【python】打包神器--pyinstallerPython
- Walle —— Android多渠道打包神器Android
- iOS開發-自動打包神器iOS
- 第108天:免殺對抗-Python&混淆演算法&反序列化&打包生成器&Py2exe&NuitkaPython演算法UI
- 拯救php效能的神器webman-打包二進位制PHPWeb
- spring構建神器(等於打包加執行)Spring
- Python的iOS自動化打包PythoniOS
- Python---pyinstaller打包Python
- Python爬蟲神器requests庫的使用Python爬蟲
- Python程式管理神器——SupervisorPython
- 使用PyInstaller打包Python程式Python
- QPython在手機上執行Python的神器Python
- 加固+美團walle簽名打包+Python一鍵打包Python
- python檔案打包利器之pyinstaller的使用Python
- PyInstaller打包Python程式為exePython
- python程式碼打包exe程式Python
- 視覺化執行Python的神器Jupyter Notebook視覺化Python
- Python視覺化神器Yellowbrick使用Python視覺化
- python三大神器之fabricPython
- Python多環境管理神器(pipenv)Python
- python3.6 使用pyinstaller 打包web程式的方法PythonWeb
- Python 打包 windows 可執行的 exe 檔案PythonWindows
- pyinstaller打包python成.exe檔案Python
- python元組如何打包和解包Python
- Grequests,非常 Nice 的 Python 非同步 HTTP 請求神器Python非同步HTTP
- 用pyinstaller打包你的Python程式並繫結CPUPython
- python三大神器===》生成器Python
- Python——視覺化神器pyecharts的正確開啟方式Python視覺化Echarts
- 【摸魚神器】基於python的BOSS識別系統Python
- Docker 打包 Python 需要設定 PYTHONUNBUFFERED 嗎?DockerPython
- 用Docker打包Python執行環境DockerPython
- 你必須擁有的Python除錯神器Python除錯
- python製作exe可執行表白神器Python
- 遠端部署神器 Fabric,支援 Python3Python
- python 離線依賴包打包&安裝Python
- Python程式碼打包成可執行檔案的常用方法!Python