python打包exe 之打包sklearn模型中的各種坑及其解決方法。

2020-09-27 09:00:25

之前學習瞭如何打包,如何建立虛擬環境打包,以及如何帶資源打包exe.

python打包成exe 可執行檔案 。教學
建立虛擬環境解決python打包exe檔案過大的問題(附打包帶圖示,多個py檔案打包exe)
python將資原始檔一起打包進exe 講解(有算例)

今天在此打包資原始檔基礎上,學習如何打包sklearn模型。
sklearn是機器學習模型,當在現實生活中,我們有時需要跑模型,而神經網路需要的包更多,程式編寫也更復雜。在僅僅是為了解決問題時,我們常常傾向於選擇sklearn機器學習模型。
但是打包sklearn模型時常常出現各種錯誤。
我總結下我打包時出現的錯誤及其解決方法。

問題1:from sklearn.externals import joblib 失敗 cannot import name joblib

也許你在打包後執行exe檔案出現這個問題,那是因為你在安裝程式所需要的庫時,sklearn一般是預設最新的,而最新的skleran中已經沒有joblib。

這是因為joblib已經從sklearn中移除了,可以直接改為 import joblib
注意改原始程式中的模型儲存與載入程式碼,
改為joblib
joblib使用方法

import joblib
#將訓練的模型儲存到磁碟(value=模型名) 預設當前資料夾下
joblib.dump(filename=‘xx.model’)
model1 = joblib.load(filename=「xx.model」)

問題2:ImportError: No module named ‘sklearn.utils.cython_blas’

開啟.spec檔案

新增hiddenimports=[‘cython’, ‘sklearn’, ‘sklearn.utils._cython_blas’ ],

問題3:pyinstaller 打包後執行exe程式出現的"ModuleNotFindError"
問題如圖所示:
我在程式中使用的是svm程式,然後執行顯示沒有這個包。

首先,使用pyinstaller 打包生成".spec" 檔案
接下來,使用文字編輯器開啟".spec"檔案,在 hiddenimport=[] 部分新增缺少的module

-hidden-import 應用需要的包,但是沒有被打包進來,這裡的錯誤是最多的,因為一般是第三方包隱式呼叫其他包,然後打包出來的程式顯示Fate Error不能執行。需要自己再新增進去,

如圖所示:圖中匯入是貝葉斯模型,因為我後面模型改用貝葉斯啦,非svm
如果是svm,解決方法同圖。

然後使用pyinstaller 生成新的exe程式:

pyinstaller xx.spec

打包教學見上面給的連結
在解決這三個問題後,我的示範算例最後結果

可以執行

在這裡插入圖片描述
電氣工程的計算機萌新:餘登武。如果你覺得本文對你有用,請點個贊支援下,謝謝。
在這裡插入圖片描述