從Windows生產環境無法運行Python說起
不知道從什麼時候開始,興起了一股學習對Python的熱潮。回想自己在2014年初,剛開始入門Python的時候,那時候的廣州這個崗位的工作寥寥無幾。
而現今,但凡是高新企業的軟件公司,動不動就是大數據或者AI。沒有數據,那就網上爬取,就是大數據了。不懂人工智能,調下TensorFlow的幾個函數,就說自己具備AI技術。
部署的問題
吐槽就到此爲止,接下來我們來聊聊生產環境下無法安裝Python的問題。在客戶提供的Windows 2012R2系統中,之前項目打包免安裝版本的Python環境無法正常啓動,在啓動Python解釋器的時候,直接就是類似這樣的異常:
error:缺失api-ms-win-crt-runtimel1-1-0.dll
這樣的異常,很明顯就是宿主環境中缺乏VC庫,最簡單方式當然是如果本地機器上有對應的文件,直接拷貝一份放進去就好了。然而,對於C++鏈接庫而言,這樣的方式一般都是不成功的。於是直接訪問如下的地址https://www.microsoft.com/zh-cn/download/details.aspx?id=48145
進行相關的下載:
這裏,選擇了x64的版本進行下載。而在安裝的過程中,又出現了類似如下的異常:
原以爲對應的Python版本不對,畢竟打包時候使用的是embeddable版本。
這裏簡單說下Windows下Python的幾種安裝版本,這裏以Python3.5.3爲例,如下圖所示:
主要有:
- embeddable版,就是1個壓縮包
- executable安裝版本,就是下載後是1個msi安裝文件
- web-based安裝版本,就是1種在線安裝的版本
一般情況下,我們選擇是第2個方式,通過雙擊進行安裝。而實際在項目部署中,會採用第1種方式,這樣就不需要手工進行相關安裝操作。
換種方式進行嘗試
由於懷疑是不是因爲embeddable版本缺少某個文件導致的,於是考慮通過安裝包的方式看是否能解決問題。
於是,上Python的官方網站下載了對應的安裝版本。而在安裝的過程中,卻出現類似如下的異常:
可以發現,與之前VC安裝的時候是相同的0x80240017錯誤。
於是,在Python的官網的地址https://bugs.python.org/issue29583
中找到如下內容:
找到問題所在並解決
而官方的解決方法主要有2個:
- 開啓系統自帶的更新機制
- 手動下載對應的補丁進行安裝
對於開啓系統自帶的安全更新,可以直接在CMD中運行:
net start wuauserv
但是由於客戶的宿主機器部署在內網,不對外進行訪問。因此,對於第1種解決方案是不可行的。對於第2種方案,可以訪問https://www.microsoft.com/en-us/download/details.aspx?id=42334
下載其中的幾個補丁文件:
- Windows8.1-KB2919355-x64.msu(必備)
- Windows8.1-KB2919355-x64.msu
- Windows8.1-KB2934018-x64.msu
- Windows8.1-KB2934018-x64.msu
- Windows8.1-KB2938439-x64.msu
- Windows8.1-KB2938439-x64.msu
其中第1個補丁是必須安裝的,剩下的可以選擇安裝。
而在安裝Windows8.1-KB2919355-x64.msu
之前,需要先安裝Windows8.1-KB2919442-x64.msu
,而該補丁可以通過https://www.microsoft.com/en-us/download/details.aspx?id=42153
進行下載。
下載完成後,我們可以通過wusa.exe
進行安裝,其操作類似如下:
wusa.exe D:\Windows8.1-KB2919355-x64.msu /quiet /norestart
在這裏,選項/quiet
用於靜默模式安裝補丁,此時不會彈出相關的圖像界面,也不會出現Microsoft的軟件許可條款。而/norestart
主要用於不讓在安裝完成後重啓計算機。
結束語
不得不說,在Windows環境下部署Python3的環境就是1個考驗人耐力的時候,要在問題中找到問題的所在,並進行解決。相比Python2,問題反而少那麼一些。因此,如果可以的話,我還是比較喜歡用Python2。
參考文章:
https://support.microsoft.com...