无法安装Python软件包[SSL:TLSV1_ALERT_PROTOCOL_VERSION]


167

我正在尝试使用安装Python库pip,并收到SSL错误:

~/projects/base  pre-master±  pip install xdict

Collecting xdict
  Could not fetch URL https://pypi.python.org/simple/xdict/: There was a problem confirming the ssl certificate: [SSL: TLSV1_ALERT_PROTOCOL_VERSION] tlsv1 alert protocol version (_ssl.c:590) - skipping
  Could not find a version that satisfies the requirement xdict (from versions: )
No matching distribution found for xdict

点子版本:点子9.0.1

如何解决此错误?



Answers:


443

升级点如下:

curl https://bootstrap.pypa.io/get-pip.py | python

注意:sudo python如果不在虚拟环境中,则可能需要使用以上内容。

(请注意,pip使用pipie进行pip install --upgrade pip升级也不会正确升级。这只是一个鸡与蛋的问题。pip除非使用TLS> = 1.2,否则它将无法正常工作。)

本详细答案所述,这是由于最近对pip的TLS弃用。Python.org网站已停止支持 TLS版本1.0和1.1。

从Python状态页面:

已完成 -滚动式电源不足已完成,并且TLSv1.0和TLSv1.1已被禁用。世界标准时间4月11日15:37


对于PyCharm(virtualenv)用户:

  1. 使用Shell运行虚拟环境。(将“ ./venv/bin/activate”替换为您自己的路径)

    source ./venv/bin/activate
  2. 运行升级

    curl https://bootstrap.pypa.io/get-pip.py | python
  3. 重新启动您的PyCharm实例,然后在Preference中检查您的Python解释器。


2
这对我有用!sudo由于权限被拒绝,我不得不在前面添加错误。谢谢!
Simar

34
需要sudo才能工作: curl https://bootstrap.pypa.io/get-pip.py | sudo python
华莱士

2
@Simar @Wallace是的,sudo如果不在虚拟环境中,可能会要求。现在在答案中也添加了该位。
Anupam

1
如果您不在虚拟环境中,则可能需要指定python二进制文件的路径,如下文Ilya所述
Chris

2
在OSX上,这对我来说效果更好curl https://bootstrap.pypa.io/get-pip.py | sudo -H python3
尼克·福克斯

26

但是,如果curl命令本身因错误而失败,或者即使升级后“ tlsv1警报协议版本”仍然存在pip,则表示操作系统的基础OpenSSL库版本< 1.0.1或Python版本< 2.7.9(或3.4Python 3中的< )不支持较新的TLS 1.2协议这pip需要连接到PyPI中,因为大约一年前。您可以在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'

AttributeError(而不是预期的“5”)是指你的Python STDLIB ssl模块,对旧的OpenSSL的lib编译,缺乏对TLSv1.2工作协议(即使OpenSSL库可以或可以在以后更新)的支持。

幸运的是,无需手动升级额外的Python软件包即可解决此问题,而无需升级Python(以及整个系统),详细的逐步指南位于Stackoverflow上

注意,curlpipwget所有依赖于相同的OpenSSL lib中建立SSL连接(使用$ openssl version命令)。从curl版本7.34开始,libcurl支持TLS 1.2 ,但是如果您具有OpenSSL版本1.0.2(或更高版本),则较旧的curl版本应该能够连接。


PS
对于Python 3中,请使用python3pip3无处不在(除非你是在一个VENV / virtualenv中),包括curl从命令上面
$ curl https://bootstrap.pypa.io/get-pip.py | python3 --user


4
我还意识到我必须运行pip3,而不仅仅是pip-用命令检查版本,-V以确保您运行的是正确的点!

9

在OS X上遵循@Anupam的回答后,无论我使用哪种权限运行,都会导致以下错误:

由于环境错误而无法安装软件包:[Errno 13]权限被拒绝:...

最终什么工作是直接从我的浏览器下载一封来自PyPI一个较新的PIP封装(9.0.3) - https://pypi.org/simple/pip/,提取内容,然后PIP本地安装包:

pip install ./pip-9.0.3/

这解决了我的[SSL: TLSV1_ALERT_PROTOCOL_VERSION]错误。


7

@Anupam的解决方案对我有用。但是,我必须使用sudo并指定虚拟Python环境的确切位置:

curl https://bootstrap.pypa.io/get-pip.py | sudo /Users/{your user name}/{path to python}/bin/python

6

为了升级本地版本,我使用了一个轻微的变体:

curl https://bootstrap.pypa.io/get-pip.py | python - --user

如果您按照本要点所述将pip和程序包放在主目录下,则会出现此问题。


5

以下解决方案为我工作:

brew install python2

它还升级pip到版本1.10.1


^这是针对我们中没有在OSX上使用默认python的那些人的。我想这个问题不是OSX特有的,但是无论如何,如果您没有运行Linux,它就可以工作---除非您是通过安装了Python的系统来编写内容。
jar

这对我有用,我在OSX上使用python。我的情况是我花了一周的时间来尝试安装任何pip软件包,但都失败了。我卸载了pip,从这时开始,直到得到安装了pip的命令为止,我什么也不能做。谢谢!
AMM

3

检查您的TLS版本:

python2 -c "import urllib2,json; print(json.loads(urllib2.urlopen('https://www.howsmyssl.com/a/check').read())['tls_version'])"

如果您的TLS版本低于1.2,则您必须对其进行升级,因为PyPI存储库正处于弃用早期TLS的限制期。

来源- 升级Python的时间:TLS v1.2很快将成为必需

您可以使用以下命令升级TLS版本:

sudo apt-get update && sudo apt-get install openssl libssl-dev

这应该可以解决您的问题。祝好运!

编辑:您可以使用自己的专用python软件包存储库下载软件包,而不管TLS版本如何。 专用Python软件包存储库


2

这对我有用。在python之前添加sudo

curl https://bootstrap.pypa.io/get-pip.py |sudo python

2

对于Python2 WIN10用户:

1.彻底卸载python,包括所有文件夹。

2.获取并安装最新的python-2.7.msi(版本2.7.15)

3.步骤2之后,您可能还会发现pip也已安装。

4.现在,如果尚未更改系统的环境,则可以立即使用pip安装软件包。“ tlsv1警报协议版本”将不会出现。



2

我也遇到了这个问题。潜在的问题是Python 2.7版本<2.7.9中的ssl库不再与pip机制兼容。

如果您在Windows上运行,并且您(像我们一样)无法轻松地从2.7的不兼容版本FWIW升级,我发现如果您从另一个最新版本的Python(例如Python 2.7)的安装中复制以下文件。 15)在另一台机器上进行安装:

    Lib\ssl.py
    libs\_ssl.lib
    DLLs\_ssl.dll

它将有效地将您的SSL层“升级”到受支持的层;这样我们就可以再次使用pip,甚至可以升级pip。


1

这对我有用,我安装了最新版本的pip,然后安装了库(ciscoconfparse)。

升级点数:

curl https://bootstrap.pypa.io/get-pip.py | sudo /Users/{your user name}/{path to python}/bin/python

1

myenv:

python 2.7.14

点9.0.1

mac osx 10.9.4


mysolution:

  1. get-pip.pyhttps://packaging.python.org/tutorials/installing-packages/手动下载

  2. python get-pip.py


参考:

https://github.com/pypa/warehouse/issues/3293#issuecomment-378468534

https://packaging.python.org/tutorials/installing-packages/

安全下载get-pip.py [1]

运行python get-pip.py。[2]这将安装或升级点子。此外,如果尚未安装setuptools和wheel,则将安装它们。

确保pip,setuptools和wheel最新

尽管仅pip即可从预构建的二进制归档文件进行安装,但是最新的setuptools和wheel项目副本对于确保您也可以从源归档文件进行安装很有用:

python -m pip install --upgrade pip setuptools wheel


1

我也在Windows10上遇到了这个问题,并尝试了所有答案,但没有解决我的问题。

C:\ python367 \ Scripts> pip安装Flask

收集Flask找不到满足Flask要求的版本(来自版本:)找不到Flask的匹配发行版

之后,我发现pip配置文件已被修改。因此,我将设置pip.ini为原始默认配置,重新运行pip命令,它对我有用!

总结我的解决方案:

  1. 检查pip.ini(通常在path下C:\ProgramData\pip)是否已被修改;

  2. 如果在步骤1中为是,请尝试将其重置为默认配置。


1

或者只是所需的库不在存储库中。我是Python新手,关于升级pip的所有建议最终都被误导了。我只需要查看https://pypi.org/,发现该库(在我的情况下为气流)停在某个旧版本上,然后将其重命名。是的,愚蠢的解决方案也是可能的:-)。


1

对于所有python3pip3用户:

curl https://bootstrap.pypa.io/get-pip.py | sudo python3

然后假设您要安装熊猫

pip3 install pandas --user

1

通过以下方式安装pip的答案:

  1. curl https://bootstrap.pypa.io/get-pip.py |sudo python 要么
  2. curl https://bootstrap.pypa.io/get-pip.py | python

由于我不断收到错误,因此对我不起作用:

Could not fetch URL https://pypi.org/simple/pip/: There was a problem confirming the ssl certificate: HTTPSConnectionPool(host='pypi.org', port=443): Max retries exceeded with url: /simple/pip/ (Caused by SSLError("Can't connect to HTTPS URL because the SSL module is not available.",)) - skipping
ERROR: Could not find a version that satisfies the requirement pip (from versions: none)
ERROR: No matching distribution found for pip

我必须pip通过以下方式手动安装:

  1. 前往pip发行网站
  2. 下载tar.gz版本
  3. 将文件解压缩到本地并cd进入目录
  4. python setup.py install
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.