由于证书过期,pip在MacOS上失败并显示SSLError-如何恢复?
在MacOS(10.11.6)上使用pip搜索或安装软件包时,出现了与以下内容类似的SSL错误。
对于python2和python3都会出现问题。我通过www.python.org作为Frameworks获得了版本(2.7.14和3.6.5)。点的版本是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)
-
有两种方法可以解决此问题。
解决方法1 。在这里可以看到,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
这些命令的内容可追溯到本SO帖子。
解决方案2 。对于Python 3.6框架,将
Install Certificates.command
在下部署并安装脚本/Applications/Python 3.6/
。执行它可以解决问题,但仅限于pip3
。