无法再在 Ubuntu 12.04 LTS(Precise Pangolin)中使用 pip 安装任何 Python 2 个软件包
Cannot install any Python 2 packages using pip in Ubuntu 12.04 LTS (Precise Pangolin) anymore
TLS 版本
TLS 1.1
Time To Upgrade Your Python: TLS v1.2 Will Soon Be Mandatory
OS 详情
Distributor ID: Ubuntu
Description: Ubuntu 12.04.2 LTS
Release: 12.04
Codename: Precise Pangolin
Python版本
Python 2.7.3
画中画版本
pip 1.0 from /usr/lib/python2.7/dist-packages (python 2.7)
我知道 pip SSL 证书存在问题,过去几个月我通过使用 --index-url
选项解决了这个问题。
但现在即使那个选项也不起作用。以下是我用来解决 SSL 问题的命令。
pip install --index-url=http://pypi.python.org/simple/ scapy
和
pip install --index-url=https://pypi.python.org/simple/ scapy
以上两个命令都出现以下错误:
Downloading/unpacking scapy
Cannot fetch index base URL http://pypi.python.org/simple/
Could not find any downloads that satisfy the requirement scapy
No distributions at all found for scapy
Storing complete log in /root/.pip/pip.log
同样,我无法安装任何 Python 软件包!
我该如何解决这个问题?
当我按照@phd 的建议尝试应用 时,
我收到以下错误,
curl: (35) error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version
快速解决方法:Ubuntu 包实用程序 apt-cache
和 apt-get
允许 数千个常见的 Python 包($ sudo apt-get install python-<packagename>
).它们将比来自 pip
的内容更旧,但有些可能无法在 Ubuntu 存储库中找到。
error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version
可以通过 运行 pip 使用 -v
(冗长)以及 SSLError
、No distributions found
、[=19= 进行复制] 消息。
Python for Linux 使用系统提供的 OpenSSL 库。 curl
和 pip
(以及 wget
)也依赖于系统 OpenSSL 来建立 SSL 连接(使用 $ openssl version
命令)。但是 TLS 1.1 支持对于 pip any more 是不够的。
TLS v1.2 需要 OpenSSL 1.0.1(或更高版本)才能运行,但通常建议至少使用 OpenSSL 1.0.2。
Curl 的 libcurl 自 curl 版本 7.34, but older curl versions should be able to connect only if you had OpenSSL version 1.0.2 (or later). So, both pip
and the curl
commands you've tried fail because the operating system's underlying OpenSSL library version is below 1.0.1
(see $ openssl version
command) which does not support TLS 1.2 required 起支持 TLS 1.2。要在 Python 解释器中查看它:
>>> import ssl
>>> ssl.OPENSSL_VERSION
'OpenSSL 0.9.8o 01 Jun 2010'
>>> ssl.PROTOCOL_TLSv1_2
AttributeError: 'module' object has no attribute 'PROTOCOL_TLSv1_2'
问题的另一部分是 Python < 2.7.9(或 Python3 中的 <3.4)本身有 ssl
模块不支持 PROTOCOL_TLSv1_2,因此 pip
无法使用它,即使 openssl 是最新的。 Ubuntu 仓库中,Python 2.7.9 首次出现在 15.04 (Vivid Vervet),Python 3.4.2 出现在 14.10 (Utopic Unicorn),这意味着你不能升级系统 Python 安全而无需升级整个 OS 组件。 Python 2.7.9+ 和 3.4+ 版本通过 default.
发布了更新的 pip
从某种意义上说,你很幸运,因为 Ubuntu 12.04 是以前的 LTS(长期支持)版本,你总是可以选择 apt-get upgrade
你的整个 OS 和直接跳转到下一个 LTS 版本,它将升级从 OpenSSL 到 Python 的所有内容及其系统范围的模块。在您的 Ubuntu 12.04 (Precise Pangolin) 存储库的确切版本中,OpenSSL 1.0.1-4 可用(向后移植了安全更新),因此您可以尝试 $ sudo apt-get update && sudo apt-get install openssl libssl-dev
但它可能会导致依赖项的系统升级,而且没有 Python 升级就毫无意义。保持原始 Ubuntu-shipped Python 版本完整可以避免 breaking dependencies because many OS components 依赖 OS-shipped Python 版本。
您可以从您自己的非系统源代码编译 OpenSSL, then also your standalone non-system Python,将其链接到您刚刚编译的 OpenSSL,但是这种方法需要安装更多的“-dev”debian 软件包,并且可能不可行由于各种限制。
幸运的是,这一切都可以在不编译或升级 Python(以及整个系统)的情况下解决,通过手动安装几个 Python 包 -- 详细的分步指南是 available here on Whosebug. The cryptography manylinux1 wheel 发布了最新的静态链接 OpenSSL 库,它将启用 pip
(v10+) 并允许您继续使用 Ubuntu 12.04 而无需重大升级麻烦。
TLS 版本
TLS 1.1
Time To Upgrade Your Python: TLS v1.2 Will Soon Be Mandatory
OS 详情
Distributor ID: Ubuntu
Description: Ubuntu 12.04.2 LTS
Release: 12.04
Codename: Precise Pangolin
Python版本
Python 2.7.3
画中画版本
pip 1.0 from /usr/lib/python2.7/dist-packages (python 2.7)
我知道 pip SSL 证书存在问题,过去几个月我通过使用 --index-url
选项解决了这个问题。
但现在即使那个选项也不起作用。以下是我用来解决 SSL 问题的命令。
pip install --index-url=http://pypi.python.org/simple/ scapy
和
pip install --index-url=https://pypi.python.org/simple/ scapy
以上两个命令都出现以下错误:
Downloading/unpacking scapy
Cannot fetch index base URL http://pypi.python.org/simple/
Could not find any downloads that satisfy the requirement scapy
No distributions at all found for scapy
Storing complete log in /root/.pip/pip.log
同样,我无法安装任何 Python 软件包!
我该如何解决这个问题?
当我按照@phd 的建议尝试应用
curl: (35) error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version
快速解决方法:Ubuntu 包实用程序 apt-cache
和 apt-get
允许 $ sudo apt-get install python-<packagename>
).它们将比来自 pip
的内容更旧,但有些可能无法在 Ubuntu 存储库中找到。
error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version
可以通过 运行 pip 使用 -v
(冗长)以及 SSLError
、No distributions found
、[=19= 进行复制] 消息。
Python for Linux 使用系统提供的 OpenSSL 库。 curl
和 pip
(以及 wget
)也依赖于系统 OpenSSL 来建立 SSL 连接(使用 $ openssl version
命令)。但是 TLS 1.1 支持对于 pip any more 是不够的。
TLS v1.2 需要 OpenSSL 1.0.1(或更高版本)才能运行,但通常建议至少使用 OpenSSL 1.0.2。
Curl 的 libcurl 自 curl 版本 7.34, but older curl versions should be able to connect only if you had OpenSSL version 1.0.2 (or later). So, both pip
and the curl
commands you've tried fail because the operating system's underlying OpenSSL library version is below 1.0.1
(see $ openssl version
command) which does not support TLS 1.2 required 起支持 TLS 1.2。要在 Python 解释器中查看它:
>>> import ssl
>>> ssl.OPENSSL_VERSION
'OpenSSL 0.9.8o 01 Jun 2010'
>>> ssl.PROTOCOL_TLSv1_2
AttributeError: 'module' object has no attribute 'PROTOCOL_TLSv1_2'
问题的另一部分是 Python < 2.7.9(或 Python3 中的 <3.4)本身有 ssl
模块不支持 PROTOCOL_TLSv1_2,因此 pip
无法使用它,即使 openssl 是最新的。 Ubuntu 仓库中,Python 2.7.9 首次出现在 15.04 (Vivid Vervet),Python 3.4.2 出现在 14.10 (Utopic Unicorn),这意味着你不能升级系统 Python 安全而无需升级整个 OS 组件。 Python 2.7.9+ 和 3.4+ 版本通过 default.
从某种意义上说,你很幸运,因为 Ubuntu 12.04 是以前的 LTS(长期支持)版本,你总是可以选择 apt-get upgrade
你的整个 OS 和直接跳转到下一个 LTS 版本,它将升级从 OpenSSL 到 Python 的所有内容及其系统范围的模块。在您的 Ubuntu 12.04 (Precise Pangolin) 存储库的确切版本中,OpenSSL 1.0.1-4 可用(向后移植了安全更新),因此您可以尝试 $ sudo apt-get update && sudo apt-get install openssl libssl-dev
但它可能会导致依赖项的系统升级,而且没有 Python 升级就毫无意义。保持原始 Ubuntu-shipped Python 版本完整可以避免 breaking dependencies because many OS components 依赖 OS-shipped Python 版本。
您可以从您自己的非系统源代码编译 OpenSSL, then also your standalone non-system Python,将其链接到您刚刚编译的 OpenSSL,但是这种方法需要安装更多的“-dev”debian 软件包,并且可能不可行由于各种限制。
幸运的是,这一切都可以在不编译或升级 Python(以及整个系统)的情况下解决,通过手动安装几个 Python 包 -- 详细的分步指南是 available here on Whosebug. The cryptography manylinux1 wheel 发布了最新的静态链接 OpenSSL 库,它将启用 pip
(v10+) 并允许您继续使用 Ubuntu 12.04 而无需重大升级麻烦。