无法安装Python包[SSL:TLSV1_ALERT_PROTOCOL_VERSION]

时间:2018-04-11 07:15:48

标签: python python-2.7 pip ssl-certificate

我正在尝试使用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版本:pip 9.0.1

如何解决此错误?

17 个答案:

答案 0 :(得分:414)

升级点数如下:

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

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

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

this detailed answer中所述,这是由于最近对pip的TLS弃用。对于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解释器。

答案 1 :(得分:22)

但是如果curl命令本身失败并出现错误,或者“tlsv1 alert protocol version”即使在升级pip后仍然存在,则表示您的操作系统的基础OpenSSL库版本< ; 1.0.1或Python版本< 2.7.9(或Python 3中的< 3.4)不支持pip需要连接到PyPI的更新的TLS 1.2协议{{ 3}}。您可以在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 (以及整个系统) - 详细的分步指南是about a year ago。< / p>

  

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

           

<强> P.S。
  对于 Python 3 ,请在任何地方使用python3pip3(除非您使用的是venv / virtualenv),包括来自shouldcurl命令:
  $ curl https://bootstrap.pypa.io/get-pip.py | python3 --user

答案 2 :(得分: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]错误。

答案 3 :(得分:5)

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

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

答案 4 :(得分:5)

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

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

如果您按照this gist中的说明将pip和包保留在主目录下,则会出现此问题。

答案 5 :(得分:5)

以下解决方案对我有用:

brew install python2

它还将pip升级到版本1.10.1

答案 6 :(得分: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

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

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

答案 7 :(得分:2)

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

  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发行版website
  2. 下载tar.gz版本
  3. 将文件本地解压缩,然后cd进入目录
  4. 运行python setup.py install

答案 8 :(得分: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。

答案 9 :(得分:2)

我尝试了所有现有修补程序,但对我不起作用

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

在安装后下载pkg对我有用

答案 10 :(得分:2)

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

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

答案 11 :(得分:2)

对于Python2 WIN10用户:

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

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

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

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

答案 12 :(得分:1)

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

  

C:\ python367 \ Scripts> pip安装Flask

     

收集烧瓶找不到满足以下条件的版本   需求烧瓶(来自版本:)找不到与之匹配的分布   烧瓶

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

我的解决方案摘要:

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

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

答案 13 :(得分:1)

myenv:

python 2.7.14

点9.0.1

mac osx 10.9.4


mysolution:

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

  2. 运行python -m pip install --upgrade pip setuptools wheel


参考:

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项目副本对于确保您也可以从源归档文件进行安装非常有用:

     

UPDATE overallCounts SET (total, totalC, totalL, iic, il) = (SELECT count(*) as total, sum(case when source=0 then 1 else 0 end) as totalC, sum(case when source=2 then 1 else 0 end) as totalL, case when source=0 then 1 else 0 end as iic, case when source=2 then 1 else 0 end as il FROM widgets WHERE joinId=1234) WHERE joinId=1234;

答案 14 :(得分:1)

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

升级pip:

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

答案 15 :(得分:0)

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

答案 16 :(得分:0)

对于所有python3pip3用户来说:

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

然后假设您要安装熊猫

pip3 install pandas --user