问题描述
在 MacOS (10.11.6) 上使用 pip 搜索或安装软件包时,我收到类似于下面重现的 SSL 错误.
When searching or installing packages with pip on MacOS (10.11.6), I am getting an SSL error similar to the one reproduced below.
python2 和 python3 都会出现此问题.我通过 www.python.org 作为框架获得了版本(2.7.14 和 3.6.5).pip 的版本是 9.0.1.这个问题是新问题(2018 年 4 月),似乎与 OSX 的更新有关.
The problem occurs for both python2 and python3. I acquired the versions (2.7.14 and 3.6.5) via www.python.org as Frameworks. The version of pip was 9.0.1. The problem is new (April 2018) and seems related to an update of OSX.
如何从这个问题中恢复?
How to recover from this problem?
$ 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)
推荐答案
有两种方法可以从这个问题中恢复.
There are two ways to recover from this problem.
解决方案 1.可以阅读 这里,Python.org 站点停止了对旧 TLS 版本的支持,这会破坏 pip <9.0.3代码>.提供了一个新版本的 pip,但由于不能简单地通过损坏的 pip 进行更新,因此必须引导安装.这对我有用:
Solution 1. As can be read here, Python.org sites stopped the support for older TLS versions, which breaks pip < 9.0.3
. A new release of pip was provided, but because one cannot simply update via the broken pip, one has to bootstrap the installation. This worked for me:
# 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
这些命令的功劳返回到这篇 SO 帖子.
Credits for these commands go back to this SO post.
解决方案 2.对于 Python 3.6 框架,脚本 Install Certificates.command
部署并安装在 /Applications/Python 3.6/
下.执行它解决了问题,但仅适用于 pip3
.
Solution 2. For Python 3.6 frameworks, a script Install Certificates.command
is deployed and installed under /Applications/Python 3.6/
. Executing it resolved the problem, but only for pip3
.
这篇关于由于证书过期,pip 在 MacOS 上出现 SSLError 失败 - 如何恢复?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!