1 回答

TA貢獻1784條經驗 獲得超2個贊
Python 打包很“有趣”。讓我們去冒險吧!
pip
vendors?urllib3
,如果 Python < 2.7.9 上存在pyOpenSSL,它會自動使用 pyOpenSSL 。這樣做是因為 Python < 2.7.9 不支持TLS 中的SNI ;一個重要的現代特征。pyOpenSSL
,反過來又依賴于cryptography
,它在 2.9 版本中放棄了 1.0.1 支持。因此,當您嘗試在其中執行任何操作時,pip
都會觸發導致此錯誤的導入序列。
您在另一臺幾乎相同的服務器上沒有看到此問題的(可能)原因是該服務器cryptography
還附帶靜態鏈接較新 OpenSSL 的二進制輪。如果您使用的是 pip 8.x 或更高版本(您可能位于正常工作的服務器上,并且可能不在損壞的服務器上),它將獲取與 OpenSSL 1.1.1-latest 鏈接的輪子(前提是您使用的是x86_64。i686 輪子在 2.7 中被刪除)。
鑒于您看到的錯誤消息,幾乎可以肯定您正在損壞的服務器上運行加密 2.9.x。該版本支持環境變量解決方法。所以如果你CRYPTOGRAPHY_ALLOW_OPENSSL_101=1 pip list
這樣做的話應該會起作用。
如果有效,那么您應該立即升級cryptography
。由于您現在在此服務器上運行 pip 20.x,因此該命令CRYPTOGRAPHY_ALLOW_OPENSSL_101=1 pip install -U cryptography
應從輪子安裝版本 3.1(假設您在 x86_64 上運行)。
如果您不是在 x86_64 上運行,那么您有兩個選擇(不涉及升級您的發行版,您應該這樣做,因為 wheezy 早已不再支持?。?/p>
總是通過
CRYPTOGRAPHY_ALLOW_OPENSSL_101
并且不再升級cryptography
(2.9.2是最后一個甚至秘密支持1.0.1的版本)降級
cryptography
到2.8,也不再升級。
添加回答
舉報