當前位置: 妍妍網 > 碼農

Nuitka,Python打包神器!

2024-06-28碼農

來自:【數據分析與統計學之美】

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能完美執行啦!