首頁  >  文章  >  後端開發  >  Python的打包神器—Nuitka!

Python的打包神器—Nuitka!

WBOY
WBOY轉載
2023-04-12 23:31:122076瀏覽

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即可安裝:<span style="font-size: 15px;">pip install Nuitka</span>
  • #下載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的命令:

  • <span style="font-size: 15px;">--standalone</span>:方便移植到其他机器,不用再安装python
  • <span style="font-size: 15px;">--show-memory --show-progress</span>:展示整个安装的进度过程
  • <span style="font-size: 15px;">--nofollow-imports</span>:不编译代码中所有的import,比如keras,numpy之类的。
  • <span style="font-size: 15px;">--plugin-enable=qt-plugins</span>:我这里用到pyqt5来做界面的,这里nuitka有其对应的插件。
  • <span style="font-size: 15px;">--follow-import-to=utils,src</span>:需要编译成C++代码的指定的2个包含源码的文件夹,这里用<span style="font-size: 15px;">,</span>来进行分隔。
  • <span style="font-size: 15px;">--output-dir=out</span>:指定输出的结果路径为out。
  • <span style="font-size: 15px;">--windows-icon-from-ico=./logo.ico</span>:指定生成的exe的图标为logo.ico这个图标,这里推荐一个将图片转成ico格式文件的网站(比特虫)。
  • <span style="font-size: 15px;">--windows-disable-console</span>:运行exe取消弹框。这里没有放上去是因为我们还需要调试,可能哪里还有问题之类的。

经过1min的编译之后,你就能在你的目录下看到:

├─utils//源码1文件夹├─src//源码2文件夹├─out//生成的exe文件夹├─demo.build 
└─demo.dist └─demo.exe//生成的exe文件├─logo.ico//demo的图标└─demo.py//main文件

当然这里你会发现真正运行exe的时候,会报错:​<span style="font-size: 15px;">no module named torch,cv2,tensorflow</span>​等等这些没有转成C++的第三方包。

这里需要找到这些包(我的是在softwarepython3.7Libsite-packages下)复制(比如numpy,cv2这个文件夹)到​<span style="font-size: 15px;">demo.dist</span>​路径下。

至此,exe能完美运行啦!

以上是Python的打包神器—Nuitka!的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:51cto.com。如有侵權,請聯絡admin@php.cn刪除