无法在Ubuntu 12.04 LTS(Precise Pangolin)中使用pip安装任何Python 2软件包

问题描述 投票:3回答:1

TLS version

TLS 1.1

Time To Upgrade Your Python: TLS v1.2 Will Soon Be Mandatory

OS details

Distributor ID:    Ubuntu
Description:    Ubuntu 12.04.2 LTS
Release:    12.04
Codename:    Precise Pangolin

Python version

Python 2.7.3

PIP version

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包!

我该如何解决这个问题?


当我尝试将this solution应用为@phd建议时,我收到以下错误,

curl:(35)错误:1407742E:SSL例程:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version

python python-2.7 pip ubuntu-12.04
1个回答
0
投票

快速解决方法:Ubuntu包实用程序apt-cacheapt-get允许search and install成千上万的常见Python包($ sudo apt-get install python-<packagename>)。它们将比来自pip的更旧,有些可能在Ubuntu存储库中找不到。

error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version可以通过运行-v(用于冗长)以及SSLErrorNo distributions foundMax retries exceeded消息来复制。

Python for Linux使用系统提供的OpenSSL lib。 curlpip(以及wget)也依赖于系统OpenSSL来建立SSL连接(使用$ openssl version命令)。但是对于pip any more来说,TLS 1.1支持还不够。 TLS v1.2要求OpenSSL 1.0.1(或更高版本)运行,但通常建议使用最少的OpenSSL 1.0.2。

Curl的libcurl支持TLS 1.2,因为curl版本是7.34,但是旧的curl版本should只有在你有OpenSSL版本1.0.2(或更高版本)时才能连接。所以,你尝试过的pipcurl命令都失败了,因为操作系统的底层OpenSSL库版本低于1.0.1(参见$ openssl version命令),它不支持TLS 1.2 required。要在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)本身具有不支持PROTOCOL_TLSv1_2的ssl模块,因此即使openssl是最新的,pip也无法使用它。在Ubuntu存储库中,Python 2.7.9首次出现在15.04(Vivid Vervet)和14.4.10中的Python 3.4.2(Utopic Unicorn),这意味着如果不升级整个OS组件,就无法安全地升级系统Python。 Python版本2.7.9+和3.4+由default发布更新的pip。

你很幸运,因为Ubuntu 12.04是一个以前的LTS(长期支持)版本,你总是可以选择apt-get upgrade你的整个操作系统并直接跳转到下一个LTS版本,它将从OpenSSL升级到Python及其系统范围的模块。在您的Ubuntu 12.04(精确穿山甲)存储库的确切版本中,OpenSSL 1.0.1-4可用(安全更新向后移植),因此您可以尝试使用$ sudo apt-get update && sudo apt-get install openssl libssl-dev但它可能会导致依赖性进行系统升级,没有Python升级就没有意义无论如何。保持原始Ubuntu发布的Python版本完好无损允许避免使用breaking dependencies,因为many OS components依赖于操作系统附带的Python版本。

你可以从源代码编译你自己的非系统OpenSSL,然后你的独立非系统Python,将它与你刚刚编译的OpenSSL相连接,但这种方法需要安装更多“-dev”debian软件包,并且可能不可行由于各种限制。

幸运的是,通过手动安装多个Python软件包,无需编译或升级Python(以及整个系统)即可解决所有问题 - 详细的分步指南是available here on Stackoverflowcryptography manylinux1轮子发布了最新的静态链接OpenSSL库,它将启用pip(v10 +)并允许您继续使用Ubuntu 12.04而无需重大升级麻烦。

© www.soinside.com 2019 - 2024. All rights reserved.