无法安装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上。

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


PS
对于Python 3中,请使用python3和pip3无处不在(除非你是在一个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.py从https://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

对于所有python3和pip3用户:

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.