sudo pip list:OpenSSL 问题

sudo pip list: OpenSSL issue

如果我尝试以下命令之一:

我总是遇到这个错误:

/usr/local/lib/python2.7/dist-packages/cryptography/hazmat/primitives/constant_time.py:26: CryptographyDeprecationWarning: Support for your Python version is deprecated. The next version of cryptography will remove support. Please upgrade to a release (2.7.7+) that supports hmac.compare_digest as soon as possible.
  utils.PersistentlyDeprecated2018,
Traceback (most recent call last):
  File "/usr/local/bin/pip", line 9, in <module>
    load_entry_point('pip==20.0.2', 'console_scripts', 'pip')()
  File "/usr/local/lib/python2.7/dist-packages/pip/_internal/cli/main.py", line 73, in main
    command = create_command(cmd_name, isolated=("--isolated" in cmd_args))
  File "/usr/local/lib/python2.7/dist-packages/pip/_internal/commands/__init__.py", line 96, in create_command
    module = importlib.import_module(module_path)
  File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module
    __import__(name)
  File "/usr/local/lib/python2.7/dist-packages/pip/_internal/commands/list.py", line 13, in <module>
    from pip._internal.cli.req_command import IndexGroupCommand
  File "/usr/local/lib/python2.7/dist-packages/pip/_internal/cli/req_command.py", line 15, in <module>
    from pip._internal.index.package_finder import PackageFinder
  File "/usr/local/lib/python2.7/dist-packages/pip/_internal/index/package_finder.py", line 21, in <module>
    from pip._internal.index.collector import parse_links
  File "/usr/local/lib/python2.7/dist-packages/pip/_internal/index/collector.py", line 12, in <module>
    from pip._vendor import html5lib, requests
  File "/usr/local/lib/python2.7/dist-packages/pip/_vendor/requests/__init__.py", line 97, in <module>
    from pip._vendor.urllib3.contrib import pyopenssl
  File "/usr/local/lib/python2.7/dist-packages/pip/_vendor/urllib3/contrib/pyopenssl.py", line 48, in <module>
    from cryptography.hazmat.backends.openssl import backend as openssl_backend
  File "/usr/local/lib/python2.7/dist-packages/cryptography/hazmat/backends/openssl/__init__.py", line 7, in <module>
    from cryptography.hazmat.backends.openssl.backend import backend
  File "/usr/local/lib/python2.7/dist-packages/cryptography/hazmat/backends/openssl/backend.py", line 75, in <module>
    from cryptography.hazmat.bindings.openssl import binding
  File "/usr/local/lib/python2.7/dist-packages/cryptography/hazmat/bindings/openssl/binding.py", line 205, in <module>
    _verify_openssl_version(Binding.lib)
  File "/usr/local/lib/python2.7/dist-packages/cryptography/hazmat/bindings/openssl/binding.py", line 169, in _verify_openssl_version
    "You are linking against OpenSSL 1.0.1, which is no longer "
RuntimeError: You are linking against OpenSSL 1.0.1, which is no longer supported by the OpenSSL project. You need to upgrade to a newer version of OpenSSL.

错误很清楚,我知道!不清楚的是:

附加信息:

Python 包装很“有趣”。一起去冒险吧!

pip 供应商 urllib3,其中 automatically uses pyOpenSSL if it is present on Python < 2.7.9. This is done because Python < 2.7.9 does not support SNI 在 TLS 中;一个重要的现代特征。 pyOpenSSL 又依赖于 cryptography,后者在 2.9 版中放弃了对 1.0.1 的支持。因此,当您尝试在 pip 中执行任何操作时,它会触发导致此错误的导入序列。

您在另一台几乎相同的服务器上没有看到此问题的(可能)原因是 cryptography 还提供静态 link 较新 OpenSSL 的二进制轮。如果您使用的是 pip 8.x 或更高版本(您可能在工作的服务器上,并且可能在损坏的服务器上 not),它将获取一个轮子 link针对 OpenSSL 1.1.1-latest(前提是您使用的是 x86_64。i686 轮子在 2.7 中被丢弃)。

鉴于您看到的错误消息,您几乎可以肯定 运行 密码学 2.9.x 在损坏的服务器上。该版本 supports an environment variable 解决方法。所以如果你这样做 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 你应该这样做早就不支持了!):

  1. 始终通过 CRYPTOGRAPHY_ALLOW_OPENSSL_101 并且永远不会再次升级 cryptography(2.9.2 是最后一个秘密支持 1.0.1 的版本)
  2. cryptography 降级到 2.8 并且永远不再升级它。