從Windows生產環境無法運行Python說起

從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...
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章