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

时间:2018-04-20 14:12:53

标签: python python-2.7 pip ubuntu-12.04

TLS版

TLS 1.1

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

操作系统详细信息

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

Python版

Python 2.7.3

PIP版

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警报协议版本

1 个答案:

答案 0 :(得分: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,但是只有当你有OpenSSL版本1.0.2(或更高版本)时,旧的curl版本should才能连接 。因此,您尝试过的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&lt; 2.7.9(或Python3中的<3.4)本身有ssl模块不支持PROTOCOL_TLSv1_2,因此即使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而无需重大升级麻烦。