虛擬環境遷移問題排查
背景
某項目開發過程中python虛擬環境通過anaconda conda創建,然后將該虛擬環境直接復制到開發環境中,將整個項目打包成exe之后,出現了一個奇怪的問題:在win8,win10,win11上均沒有問題,但在win7上運行過程中出現了缺包的問題。
- 【WinError127】找不到指定的程序:pywin32_system32和numpy\.libs.

- 電腦版本:win7 專業版 Service Pack 1
問題排查
問題復現
我們在相同的電腦版本上,嘗試進行該問題的復現。
- 首先通過虛擬環境打開對應的python.exe。然后重新導入缺少的包:
import numpy as np
發現并為報錯。
- 針對當前項目,原來python服務是通過js命令自動調用,我們產生嘗試手動啟動python服務,發現其也可以正常啟動。所以可以說明打包的虛擬環境沒有問題。
pywin32_system32
根據網上的經驗,需要將虛擬環境下pywin32_system32下包下的動態鏈接庫復制到對應C:Windows\System32.

(繼續嘗試...)
追加環境變量
將虛擬環境中的python.exe的安裝路徑添加到環境變量中.
(然并卵,繼續復現...)。
win7 上安裝python
版本問題
如指定PEP 11,Python 版本僅支持 Windows 平臺,而 Microsoft 認為該平臺處于擴展支持之下。這意味著 Python 3.11 支持 Windows 8.1 和更新版本。如果您需要 Windows 7 支持,請安裝 Python 3.8。
當前版本(python3.8.5 )支持
在win7 sp1上安裝Python3.8
網上資源
stackoverflow:Installing Python 3.8 on windows 7 32bit with SP1

驗證過程
查看當前電腦的補丁庫,發現補丁KB2533623已經存在,所以我們先手動卸載,重新打開python.exe發現,可以復現缺包的問題。然后我們重新安裝該補丁,缺包問題解決。
在此基礎上,我們回退我們之前的操作:移除追加的環境變量、移除動態鏈接庫,發現一切仍然正??梢允褂谩?/p>
所以在當前問題中影響python虛擬環境缺包的真正問題應該是win7系統缺少"KB2533623"導致.
資源鏈接:Here
離線包安裝
背景
將python庫及其依賴包下載下來,然后離線安裝。
下載離線包的方式:

需求:安裝pymoo庫
step1:創建與現場python版本相同的虛擬環境;
step2:創建requirement.txt :里面寫pymoo(即我們需要離線下載的庫,如果版本未知,可以不寫);
step3:使用下述命令進行下載:
pip download -d dir -r requirement.txt
# dir是所有依賴包存放的位置;
step4:然后將所有下載好的文件導入到目標服務器,然后使用下述命令進行安裝:
pip install --no-index --find-links=dir -r requirement.txt
注:離線下載時需保持包環境與安裝環境一致,即一般情況下windows下導的包在windows上安裝;linux下導的包在linux上安裝.
實踐過程中出現的問題:

出現上述問題,比較郁悶,在本地服務器上順順利利,但客戶現場就是報錯。
問題排查
| 排查項 | 命令 | 排查結果 |
|---|---|---|
| 系統架構 | arch |
都是x86_64 |
| 系統core | cat /etc/redhat-release |
centos7.6(客戶)/centos7.9(本地) |
| python版本 | python |
3.6.3(客戶)/3.6.5(本地)[本地重新創建3.6.3環境后發現,下載的離線包與之前的版本全部一致] |
| pip | pip.__version__ |
9.0.1(客戶)/21.2.2(本地)下載21.2.2離線安裝包,然后在安裝上述離線包,問題解決 |

浙公網安備 33010602011771號