【问题标题】:pip fails with SSLError on MacOS because of outdated certificate - how to recover?由于证书过期,pip 在 MacOS 上出现 SSLError 失败 - 如何恢复?
【发布时间】:2018-04-24 10:08:42
【问题描述】:

在 MacOS (10.11.6) 上使用 pip 搜索或安装软件包时,我收到类似于下面重现的 SSL 错误。

python2 和 python3 都会出现此问题。我通过 www.python.org 作为框架获得了版本(2.7.14 和 3.6.5)。 pip 的版本是 9.0.1。这个问题是新问题(2018 年 4 月),似乎与 OSX 的更新有关。

如何从这个问题中恢复?

$ pip2 search numpy

Exception:
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pip/basecommand.py", line 215, in main
    status = self.run(options, args)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pip/commands/search.py", line 45, in run
    pypi_hits = self.search(query, options)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pip/commands/search.py", line 62, in search
    hits = pypi.search({'name': query, 'summary': query}, 'or')
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/xmlrpclib.py", line 1243, in __call__
    return self.__send(self.__name, args)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/xmlrpclib.py", line 1602, in __request
    verbose=self.__verbose
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pip/download.py", line 775, in request
    headers=headers, stream=True)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pip/_vendor/requests/sessions.py", line 522, in post
    return self.request('POST', url, data=data, json=json, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pip/download.py", line 386, in request
    return super(PipSession, self).request(method, url, *args, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pip/_vendor/requests/sessions.py", line 475, in request
    resp = self.send(prep, **send_kwargs)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pip/_vendor/requests/sessions.py", line 596, in send
    r = adapter.send(request, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pip/_vendor/cachecontrol/adapter.py", line 47, in send
    resp = super(CacheControlAdapter, self).send(request, **kw)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pip/_vendor/requests/adapters.py", line 497, in send
    raise SSLError(e, request=request)
SSLError: [SSL: TLSV1_ALERT_PROTOCOL_VERSION] tlsv1 alert protocol version (_ssl.c:661)

【问题讨论】:

  • 错误信息不完全一样,但问题肯定是重复的。为这个问题寻找解决方案并没有引导我找到那个有用的 SO 线程(尽管我最喜欢的搜索引擎仍然需要为这个新主题重新排序优先级)。
  • 是的,TLS 支持的这种变化在 SO 和其他地方产生了大量的帖子。你说得对,有时很难找到相关的帖子。能够在用户搜索相关错误时将其指向“可能原因”的帖子会很棒,尤其是对于此类重大更改。

标签: python ssl pip ssl-certificate


【解决方案1】:

有两种方法可以从这个问题中恢复。

解决方案 1。正如here 所述,Python.org 站点停止了对旧 TLS 版本的支持,这破坏了pip < 9.0.3。提供了一个新版本的 pip,但由于不能简单地通过损坏的 pip 进行更新,因此必须引导安装。这对我有用:

# For python2
curl https://bootstrap.pypa.io/get-pip.py | python2
# For python3 (haven't tested this myself)
curl https://bootstrap.pypa.io/get-pip.py | python3

这些命令的功劳归于this SO post

解决方案 2。对于 Python 3.6 框架,脚本Install Certificates.command 部署并安装在/Applications/Python 3.6/ 下。执行它解决了问题,但仅适用于pip3

【讨论】:

  • 实际上,OSX 并没有真正打破 pip pip 使用旧的失败TLS。请参阅此detailed answer(也链接自您提到的 SO 帖子)
  • 知道了。相应地更新了我的答案。感谢您提供信息。
  • 几天后我找到了这篇文章,谢谢 - 已经解决了所有关于 ptoxy 和证书的问题,但这是由于 PIP 版本失败。我安装了最新版本的python,并下载了pypi.org/project/pip/9.0.3/#files并手动降级“pip install pip-9.0.3.tar.gz”现在它可以工作了
【解决方案2】:

你只需要重新安装 Python

brew reinstall python

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-19
    • 1970-01-01
    • 2020-09-22
    • 2019-10-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-18
    • 1970-01-01
    相关资源
    最近更新 更多