2023年5月12日 星期五

[Python]Pipenv虛擬環境的嘗試與Bug解除

 


项目背景:

原項目經打包後,執行檔(.exe)過於龐大,經解讀網路資料後,在pipenv虛擬環境打包可有效縮小執行檔的大小。原因也易理解,因在pipenv中的安裝包可視該項目導入的包需求來安裝,可降低其他無關的安裝包一併被打包成執行檔,換言之,可將pipenv視為一個迷你版的python作業環境。

然而,在創建和操作pipenv虛擬環境,不免俗會遇到一些坑,但問題順利解決並累積經驗,不就正是我們需要的嗎? 另外,藉由VMware虛擬機的操作經驗,一併感受和嘗試pipenv操作邏輯的異同之處,記錄查閱也供分享。

问题描述和解決方案

1.創建pipenv: 

a.原以為創建虛擬環境不過是照本宣科,在cmd視窗中安裝pipenv,並執行pipenv shell來進入虛擬環境中,以及產生出.virtualenv資料夾,如封面兩張圖。其實封面兩張圖是在Anaconda power shell命令列才得以順利創建。原因尚不明,留待了解cmd和Anaconda power shell差異來釐清。

b.順利創建後,可切換到cmd視窗中,以pipenv shell進入虛擬環境。可藉由封面圖中的藍色框來辨識是否已順利進入,其中"Thinkpad-8TdZSJ10"即是.virtualenv資料夾中的子資料夾。

c.在pipenv虛擬環境中,可視需求來自行安裝包,例如該欲打包的影像項目,至少就需要安裝pyinstaller和opencv-python安裝包。可輸入pipenv install pyinstaller和pipenv install opencv-python來完成安裝。

d.若在菜單上找不到Anaconda power shell,可在cmd中,先切換Anaconda路徑再輸入python .\Lib\_nsis.py mkmenus,啟動Anaconda重新製作菜單,如下圖一和圖二所示。

圖一

圖二

2.ImportError: No module named

這個問題是此次卡關最久的步驟,原因是已在pipenv安裝對應的包,但仍會顯示ImportError: No module named,甚至一度以為是在python和pipenv中的安裝包版本不同所導致的。經過多種測試過程,最終有效解法為移除已建立的虛擬環境,重新建立虛擬環境和安裝對應包(OS:目前研判可能是虛擬環境在測試過程中不小心增刪到甚麼關聯檔案,但查詢對應依賴包確實又存在,也待釐清。)

3.ImportError: DLL load failed while importing win32api

該問題的原因來自於該項目有調用window系統的應用程式和硬體,如鍵盤和Excel,因此需給予對應的DLL檔案。該錯誤可将虛擬環境資料夾(我的範例路徑是.virtualenv\Thinkpad-8TdZSJ10) \Lib\site-packages\pywin32_system32中的兩個DLL檔案,複製到C:\Windows\System32。

經過上述流程後,該項目執行檔順利瘦身為原來的八分之一,另外,關於pyinstaller的指令,也有一些變化形態,如 -i XXX.ico 來加入客製化icon,可以玩玩看。

Reference:


沒有留言:

張貼留言