摘要:在客戶提供的系統中之前項目打包免安裝版本的環境無法正常啟動在啟動解釋器的時候直接就是類似這樣的異常缺失這樣的異常很明顯就是宿主環境中缺乏庫最簡單方式當然是如果本地機器上有對應的文件直接拷貝一份放進去就好了。
從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...
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/44939.html
導讀:興許所有程序員都有命名困難癥,在考慮變量、常量、方法、類、文件等命名時,總會千方百計嘗試一些語義化的方式去實現。 曾經有那么一段時間,一些node初學的同學遇到了同樣的問題:Hello World 跑不動! 原文首發于個人博客:這事要從node node.js說起 0. 謎之 Hello World 問題的起源非常簡單,當我們在編寫一個入門程序時,就會迅速想起那句膾炙人口的語句: conso...
閱讀 3190·2021-11-10 11:35
閱讀 1295·2019-08-30 13:20
閱讀 1117·2019-08-29 16:18
閱讀 2131·2019-08-26 13:54
閱讀 2155·2019-08-26 13:50
閱讀 955·2019-08-26 13:39
閱讀 2473·2019-08-26 12:08
閱讀 1951·2019-08-26 10:37