无法安装Python包[SSL:TLSV1_ALERT_PROTOCOL_VERSION]

问题描述 投票:155回答:15

我正在尝试使用pip安装Python库,收到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

点数版本:pip 9.0.1

我该如何解决这个错误?

python python-2.7 pip ssl-certificate
15个回答
417
投票

升级点如下:

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

注意:如果不在虚拟环境中,您可能需要使用上面的sudo python

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

正如在this detailed answer中所提到的,这是由于最近TIP对TIP的弃用。对于TLS版本1.0和1.1,Python.org站点都有stopped support

从Python状态页面:

已完成 - 滚动限制已完成,TLSv1.0和TLSv1.1已禁用。 4月11日15:37 UTC

对于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
投票

我尝试了所有现有的修复程序而不是为我工作

我通过在https://www.python.org/downloads/mac-osx/下载.pkg重新安装python 2.7(也将安装pip)

安装后下载pkg为我工作


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]这将安装或升级pip。此外,如果它们尚未安装,它将安装setuptools和wheel。

确保pip,setuptools和wheel是最新的

虽然单独使用pip足以从预先构建的二进制存档进行安装,但setuptools和wheel项目的最新副本对于确保您也可以从源存档进行安装非常有用:

python -m pip install --upgrade pip setuptools wheel


1
投票

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

C:\ python367 \ Scripts> pip install Flask

收集Flask无法找到满足要求的版本Flask(来自版本:)没有找到Flask的匹配分布

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

总结我的解决方案:

  1. 检查pip.ini(通常在路径C:\ProgramData\pip下)已被修改;
  2. 如果在步骤1中为是,请尝试将其重置为默认配置。

0
投票

或者只是所需的库不在repo中。我是Python新手,关于升级pip的所有建议最终都显示为误导。我只是想看看https://pypi.org/,发现图书馆(在我的情况下气流)停在一些旧版本,之后它被重命名。是的,也可能是愚蠢的解决方案:-)。


22
投票

但是如果curl命令本身失败并出现错误,或者即使在升级pip后仍然存在“tlsv1 alert protocol version”,则表示操作系统的基础OpenSSL库版本<1.0.1或Python版本<2.7.9(或Python 3中的<3.4)不支持自pip以来about a year ago需要连接到PyPI的更新的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'

AttributeError(而不是预期的'5')意味着你的Python stdlib ssl模块,针对旧的openssl lib编译,缺乏对TLSv1.2协议的支持(即使openssl库可以或稍后可以更新)。

幸运的是,它可以在不升级Python(以及整个系统)的情况下通过手动安装额外的Python包来解决 - 详细的分步指南是available here on Stackoverflow

注意,curlpip以及wget都依赖于相同的OpenSSL lib来建立SSL连接(使用$ openssl version命令)。 libcurl支持TLS 1.2,因为curl版本是7.34,但是如果你有OpenSSL版本1.0.2(或更高版本),那么旧的curl版本should能够连接。


附: 对于Python 3,请在任何地方使用python3pip3(除非你在venv / virtualenv中),包括来自curlabove命令: $ curl https://bootstrap.pypa.io/get-pip.py | python3 --user


9
投票

关于@Anupam对OS X的回答导致我出现以下错误,无论我使用以下权限运行它:

由于EnvironmentError导致无法安装软件包:[Errno 13]权限被拒绝:...

最终工作的是从我的浏览器直接从PyPI下载更新的pip包(9.0.3) - https://pypi.org/simple/pip/,提取内容,然后在本地pip安装包:

pip install ./pip-9.0.3/

这修复了我的[SSL: TLSV1_ALERT_PROTOCOL_VERSION]错误。


5
投票

以下解决方案适合我:

brew install python2

它还将pip升级到版本1.10.1


5
投票

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

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

5
投票

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

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

如果您将pip和包保存在主目录下,如this gist中所述,则会出现此问题。


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的弃用期。

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

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

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

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

编辑:您可以使用自己的私有python包存储库下载包,无论TLS版本如何。 Private Python Package Repository


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警报协议版本”将不会出现。

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