sudo pip list:OpenSSL 问题
sudo pip list: OpenSSL issue
如果我尝试以下命令之一:
sudo pip list
sudo pip uninstall <something>
我总是遇到这个错误:
/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.
错误很清楚,我知道!不清楚的是:
- 为什么我不能 列出 我安装的软件包? OpenSSL 错误...带有 pip 列表?! OpenSSL 与已安装软件包列表有什么关系?!我只想看看我的服务器上安装了什么
- 为什么我不能 卸载 一个包?同样,OpenSSL 与它有什么关系?
- 我有一个服务器相同有这个问题的服务器(Debian 7,相同的OpenSSL版本,相同的Python版本)但在另一台服务器上一切正常,没有问题(甚至没有警告)
附加信息:
- Python版本:Python2.7.3
- OpenSSL 版本:OpenSSL 1.0.1e 2013 年 2 月 11 日
- OS: Debian GNU/Linux 7
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 你应该这样做早就不支持了!):
- 始终通过
CRYPTOGRAPHY_ALLOW_OPENSSL_101
并且永远不会再次升级 cryptography
(2.9.2 是最后一个秘密支持 1.0.1 的版本)
- 将
cryptography
降级到 2.8 并且永远不再升级它。
如果我尝试以下命令之一:
sudo pip list
sudo pip uninstall <something>
我总是遇到这个错误:
/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.
错误很清楚,我知道!不清楚的是:
- 为什么我不能 列出 我安装的软件包? OpenSSL 错误...带有 pip 列表?! OpenSSL 与已安装软件包列表有什么关系?!我只想看看我的服务器上安装了什么
- 为什么我不能 卸载 一个包?同样,OpenSSL 与它有什么关系?
- 我有一个服务器相同有这个问题的服务器(Debian 7,相同的OpenSSL版本,相同的Python版本)但在另一台服务器上一切正常,没有问题(甚至没有警告)
附加信息:
- Python版本:Python2.7.3
- OpenSSL 版本:OpenSSL 1.0.1e 2013 年 2 月 11 日
- OS: Debian GNU/Linux 7
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 你应该这样做早就不支持了!):
- 始终通过
CRYPTOGRAPHY_ALLOW_OPENSSL_101
并且永远不会再次升级cryptography
(2.9.2 是最后一个秘密支持 1.0.1 的版本) - 将
cryptography
降级到 2.8 并且永远不再升级它。