无法安装 Python 包 [SSL: TLSV1_ALERT_PROTOCOL_VERSION]

Posted

技术标签:

【中文标题】无法安装 Python 包 [SSL: TLSV1_ALERT_PROTOCOL_VERSION]【英文标题】:Not able to install Python packages [SSL: TLSV1_ALERT_PROTOCOL_VERSION] 【发布时间】:2018-09-20 23:12: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 版本:pip 9.0.1

如何解决这个错误?

【问题讨论】:

关注这个答案***.com/a/46808948/2419644 Unable to install python libraries的可能重复 确保您拥有正确的 openssl 版本。然后用 openssl 路径重新编译 Python。 确保您拥有正确的 openssl 版本。 【参考方案1】:

通过pip安装的答案:

    curl https://bootstrap.pypa.io/get-pip.py |sudo pythoncurl 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

    转到pip 分发website 下载tar.gz版本 本地解压文件,cd进入目录 运行python setup.py install

【讨论】:

【参考方案2】:

对于所有python3pip3 用户:

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

然后假设您要安装 pandas

pip3 install pandas --user

【讨论】:

【参考方案3】:

或者只是所需的库不在 repo 中。我是 Python 新手,所有关于升级 pip 的建议最终都被证明是误导性的。我只需要查看 https://pypi.org/ ,发现库(在我的情况下为气流)在某个旧版本处停止,之后它被重命名。是的,这种愚蠢的解决方案也是可能的:-)。

【讨论】:

【参考方案4】:

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

C:\python367\Scripts>pip install Flask

Collecting Flask 找不到满足 要求 Flask(来自版本:)没有找到匹配的分布 烧瓶

之后,我发现 pip 配置文件被修改了。所以,我将pip.ini设置为原来的默认配置,重新运行pip命令就可以了!

总结一下我的解决方案:

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

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

【讨论】:

【参考方案5】:

但是如果curl命令本身失败并报错,或者"tlsv1 alert protocol version"在升级pip后仍然存在,这意味着你的操作系统底层OpenSSL库版本1.0.1或 Python 版本2.7.9(或 Python 3 中的 3.4)不支持 pip 需要连接到 PyPI 的较新的 TLS 1.2 协议,因为 about a year ago。您可以在 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 库编译,缺乏对 TLSv1.2 协议的支持(即使可以或可以更新 openssl 库稍后)。

幸运的是,无需升级 Python(以及整个系统),通过手动安装额外的 Python 包即可解决 - 详细的分步指南是 available here on ***。

注意,curlpipwget 都依赖同一个 OpenSSL 库来建立 SSL 连接(使用 $ openssl version 命令)。 libcurl 自 curl 版本 7.34 起支持 TLS 1.2,但较旧的 curl 版本 should 能够连接 如果您有 OpenSSL 版本 1.0.2(或更高版本)。


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

【讨论】:

我还意识到我必须运行pip3,而不仅仅是pip — 使用命令-V 检查版本以确保您运行的是正确的点子!!【参考方案6】:

我的环境:

python 2.7.14

点 9.0.1

mac osx 10.9.4


我的解决方案:

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

    运行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

【讨论】:

【参考方案7】:

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

【讨论】:

【参考方案8】:

升级pip如下:

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

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

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

正如this detailed answer 中所述,这是由于最近 TLS 弃用了 pip。 Python.org 网站有 stopped support 用于 TLS 版本 1.0 和 1.1。

从 Python 状态页面:

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

对于 PyCharm(虚拟环境)用户:

    使用 shell 运行虚拟环境。 (把“./venv/bin/activate”换成你自己的路径)

    source ./venv/bin/activate
    

    运行升级

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

    重新启动您的 PyCharm 实例,并在 Preference 中检查您的 Python 解释器。

【讨论】:

这对我有用!由于权限被拒绝错误,我不得不在前面添加sudo。谢谢! 需要 sudo 才能工作:curl https://bootstrap.pypa.io/get-pip.py | sudo python @Simar @Wallace 是的,如果不在虚拟环境中,可能需要sudo。现在在答案中也添加了这一点。 如果您不在虚拟环境中,您可能需要指定 python 二进制文件的路径,如下 Ilya 所述 在 OSX 上这对我来说效果更好curl https://bootstrap.pypa.io/get-pip.py | sudo -H python3【参考方案9】:

我也遇到了这个问题。根本问题是 Python 2.7 版本

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

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

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

【讨论】:

【参考方案10】:

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

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

安装下载 pkg 后为我工作

【讨论】:

【参考方案11】:

对于 Python2 WIN10 用户:

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

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

3.在第2步之后,你可能会发现pip已经安装了。

4.现在,如果你的系统'env没有改变,你现在可以使用pip安装包。不会出现“tlsv1警报协议版本”。

【讨论】:

【参考方案12】:

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

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

【讨论】:

【参考方案13】:

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

升级点子:

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

【讨论】:

【参考方案14】:

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

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

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

【讨论】:

【参考方案15】:

遵循@Anupam 在 OS X 上的回答对我来说导致以下错误,无论我使用何种权限运行它:

由于 EnvironmentError 无法安装软件包:[Errno 13] Permission denied: ...

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

pip install ./pip-9.0.3/

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

【讨论】:

【参考方案16】:

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

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

【讨论】:

【参考方案17】:

以下解决方案对我有用:

brew install python2

它还将pip升级到1.10.1版

【讨论】:

^ 这个是为我们这些不使用 OSX 上的默认 python 的人准备的。我想这个问题不是特定于 OSX 的,但无论如何,如果你没有运行 Linux,这可行 --- 除非你在系统安装的 Python 上编写内容。 这个对我有用,我在 OSX 上使用 python。我的情况我花了一周时间尝试安装任何 pip 包,但它失败了。我卸载了 pip,从那时起我什么都做不了,直到我得到这个为我安装 pip 的命令。谢谢!

以上是关于无法安装 Python 包 [SSL: TLSV1_ALERT_PROTOCOL_VERSION]的主要内容,如果未能解决你的问题,请参考以下文章

使用pip安装包提示TLS证书错误解决办法

Python 3.6 SSL - 使用TLSv1.0而不是TLSv1.2密码 - (2路身份验证和自签名证书)

mac下python环境pip报错[SSL: TLSV1_ALERT_PROTOCOL_VERSION] tlsv1 alert protocol version (_ssl.c:590) 的解决方法

cURL 错误 (35):错误:14077458:SSL 例程:SSL23_GET_SERVER_HELLO:tlsv1 无法识别的名称

centos7 apache配置ssl支持tlsv1.0 1.1 1.2

OpenSSL: error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version