无法安装 Python 包[ SSL: TLSV1 _ ALERT _ PROTOCOL _ VERION ]

我正在尝试使用 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

如何修复此错误?

166968 次浏览

升级点如下:

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

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

(注意,使用 pippip install --upgrade pip升级 pip也不会正确升级。只是先有鸡还是先有蛋的问题。除非使用 TLS > = 1.2,否则 pip不会起作用。)

正如在 这个详细的答案中提到的,这是由于最近的 TLS 对 pip 的反对。Org 站点有针对 TLS 版本1.0和1.1的 停止支持

来自 Python 状态页面:

完成 -滚动限电结束,TLSv1.0和 世界协调时4月11日15:37 TLSv1.1已被禁用


对于 PyCharm (viralenv)用户:

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

    source ./venv/bin/activate
    
  2. Run upgrade

    curl https://bootstrap.pypa.io/get-pip.py | python
    
  3. Restart your PyCharm instance, and check your Python interpreter in Preference.

但是,如果 curl命令本身出错失败,或者 “ tlsv1警报协议版本”在升级 pip之后仍然存在,这意味着操作系统的底层 OpenSSL 库版本 < 1.0.1或 Python 版本 < 2.7.9(或 Python 3中的 < 3.4)不支持更新的 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 库来建立 SSL 连接(使用 $ openssl version命令)。Libcurl 从 curl 版本 7.34开始就支持 TLS 1.2,但是较老的 curl 版本 应该可以连接到 OpenSSL 版本1.0.2(或更高版本)的 如果


附言。
对于 巨蟒3,请在任何地方使用 python3pip3(除非您使用 venv/viralenv) ,包括来自 以上curl命令:
$ curl https://bootstrap.pypa.io/get-pip.py | python3 --user

检查你的 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

这应该能解决你的问题。 祝你好运!

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

按照@Anupam 在 OS X 上的回答,无论我使用什么权限运行它,都会导致以下错误:

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

最终的工作是从我的浏览器直接从 PyPI 下载一个新的 pip 包(9.0.3)—— https://pypi.org/simple/pip/,解压缩内容,然后 pip 在本地安装该包:

pip install ./pip-9.0.3/

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

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

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

如果按照 这个要点中的描述将 pip 和包保存在主目录下,就会出现这个问题。

下面的解决方案对我很有效:

brew install python2

它还将 pip升级到了1.10.1版本

这对我很有用,我安装了最新版本的 pip,然后安装了库(顺便说一下)。

升级点:

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

对于 Python 2 WIN10用户:

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

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

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

4.现在,如果您的系统‘ env 没有更改,那么现在可以使用 pip 来安装软件包。“ tlsv1警报协议版本”将不会出现。

这对我很有用,在 python 之前加上 sudo

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

我尝试了所有现有的修复程序,但没有为我工作

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

安装后为我工作下载 pkg

我也遇到了这个问题。根本问题是 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。

我也在我的视窗上找到了这个问题,并且尝试了所有的答案,但是没有解决我的问题。

C: python367脚本 > pip install Flask

收集瓶无法找到满足 要求 Flask (来自版本:)没有找到匹配的发行版 酒瓶

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

我的解决办法总结如下:

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

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

或者只是回购中没有必需的库。我是 Python 的新手,所有关于升级 pip 的建议最终都显示为误导。我只好查看 https://pypi.org/,发现这个库(在我的例子中是气流)在某个旧版本中停了下来,之后它被重新命名。是的,这个愚蠢的解决方案也是可行的: ——)。

对于所有 python3pip3的用户:

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

然后假设你想安装熊猫

pip3 install pandas --user

安装 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