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 早已不再支持!):
总是通过
CRYPTOGRAPHY_ALLOW_OPENSSL_101
并且不再升级cryptography
(2.9.2是最后一个甚至秘密支持1.0.1的版本)降级
cryptography
到2.8,也不再升级。
添加回答
举报