【问题标题】:Not able to install Python packages [SSL: TLSV1_ALERT_PROTOCOL_VERSION]无法安装 Python 包 [SSL: TLSV1_ALERT_PROTOCOL_VERSION]
【发布时间】:2020-04-26 04:12:34
【问题描述】:

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

如何解决这个错误?

【问题讨论】:

标签: python python-2.7 pip ssl-certificate


【解决方案1】:

升级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(虚拟环境)用户:

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

    source ./venv/bin/activate
    
  2. 运行升级

    curl https://bootstrap.pypa.io/get-pip.py | python
    
  3. 重新启动您的 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
【解决方案2】:

但是如果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 Stackoverflow

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


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

【讨论】:

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

遵循@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] 错误。

【讨论】:

    【解决方案4】:

    @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
      

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

      【讨论】:

        【解决方案6】:

        以下解决方案对我有用:

        brew install python2
        

        它还将pip升级到1.10.1版

        【讨论】:

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

          这对我有用。在python前加sudo

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

          【讨论】:

            【解决方案9】:

            对于 Python2 WIN10 用户:

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

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

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

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

            【讨论】:

              【解决方案10】:

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

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

              安装下载 pkg 后为我工作

              【讨论】:

                【解决方案11】:

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

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

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

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

                【讨论】:

                  【解决方案12】:

                  对于所有python3pip3 用户:

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

                  然后假设您要安装 pandas

                  pip3 install pandas --user
                  

                  【讨论】:

                    【解决方案13】:

                    通过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 分发website
                    2. 下载tar.gz版本
                    3. 在本地解压文件并将cd放入目录中
                    4. 运行python setup.py install

                    【讨论】:

                      【解决方案14】:

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

                      升级点子:

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

                      【讨论】:

                        【解决方案15】:

                        我的环境:

                        python 2.7.14

                        点 9.0.1

                        mac osx 10.9.4


                        我的解决方案:

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

                        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

                        【讨论】:

                          【解决方案16】:

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

                          C:\python367\Scripts>pip install Flask

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

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

                          总结一下我的解决方案:

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

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

                          【讨论】:

                            【解决方案17】:

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

                            【讨论】:

                              猜你喜欢
                              • 1970-01-01
                              • 2018-12-29
                              • 2021-08-12
                              • 2018-10-24
                              • 2011-06-14
                              • 2021-01-23
                              相关资源
                              最近更新 更多