首页 文章

无法安装Python包[SSL:TLSV1_ALERT_PROTOCOL_VERSION]

提问于
浏览
140

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

我该如何解决这个错误?

13 回答

  • 1

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

    升级点如下:

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

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

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

    this detailed answer中所述,这是由于最近对pip的TLS弃用 . 对于TLS版本1.0和1.1,Python.org站点有stopped support .

    从Python状态页面:

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

    For PyCharm (virtualenv) users:

    • 使用shell运行虚拟环境 . (将“./venv/bin/activate”替换为您自己的路径)
    source ./venv/bin/activate
    
    • 运行升级
    curl https://bootstrap.pypa.io/get-pip.py | python
    
    • 重新启动PyCharm实例,并在Preference中检查Python解释器 .
  • 379

    对于Python 3用户,curl需要通过管道传送到 python3

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

    如果上述任何 curl 命令失败且出现相同的 "tlsv1 alert protocol version" 错误,请ensure系统的基础OpenSSL库至少为1.0.1版,以使TLS v1.2正常工作 .

    用于 Build SSL连接的curl和pip(和wget)depend on OpenSSL . 可以使用 $ openssl version 命令验证版本 .

    libcurl本身支持TLS 1.2,因为curl版本7.34,但是如果你有OpenSSL版本1.0.2(或更高版本),旧版本should也可以连接,默认情况下使用TLS 1.2 . 如果您缺少curl等工具而无法安装它,也可以使用您喜欢的Web浏览器下载get-pip.py(或pip包本身)...

    最后,如果仍然不行,另一件可以帮助的事情(特别是对于较旧的OS / Python版本)是确保安装以下Python包(与SSL和pip功能相关的依赖关系): pyasn1, certifi, asn1crypto, cryptography, pyOpenSSL, urllib3

    您可以通过在Python解释器中尝试此导入来检查哪一个丢失:

    >>> import pyasn1, certifi, asn1crypto, cryptography, OpenSSL, urllib3
    

    因为pip无法连接(还),只需通过您喜爱的Web浏览器逐个从pypi.org下载最新的轮子,然后按照上面列出的顺序使用 pip install --user <package-file.whl> 命令(或_348268_ for Python 3)进行安装,以解决pip依赖关系 .

    注意:它应该以shell命令 $ sudo apt-get install build-essential libssl-dev libffi-dev python-dev (或Python 3的情况下为 python3-dev )开头,以确保可以构建这些Python包 .

  • 2

    关于@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

  • 2

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

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

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

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

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

  • 9

    对于Python2 WIN10用户:

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

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

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

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

  • 5

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

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

    安装后下载pkg为我工作

  • 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

  • 0

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

    升级点数:

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

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

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

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

    C:\ python367 \ Scripts> pip install Flask Collecting Flask无法找到满足要求的版本Flask(来自版本:)没有找到Flask的匹配分发

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

    总结我的情况:

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

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

相关问题