pip falla con SSLError en MacOS debido a un certificado desactualizado: ¿cómo recuperarlo?

Al buscar o instalar paquetes con pip en MacOS (10.11.6), aparece un error de SSL similar al que se reproduce a continuación.

El problema ocurre tanto para python2 como para python3. Adquirí las versiones (2.7.14 y 3.6.5) a través de www.python.org como Frameworks. La versión de pip era 9.0.1. El problema es nuevo (abril de 2018) y parece estar relacionado con una actualización de OSX.

¿Cómo recuperarse de este problema?

$ 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) 

    Hay dos maneras de recuperarse de este problema.

    Solución 1 . Como se puede leer aquí , los sitios de Python.org detuvieron el soporte para versiones anteriores de TLS, lo que rompe pip < 9.0.3 . Se proporcionó una nueva versión de pip, pero debido a que no se puede actualizar simplemente a través del pip roto, se debe iniciar la instalación. Esto funcionó para mí:

     # 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 

    Los créditos para estos comandos se remontan a esta publicación SO .

    Solución 2 . Para los frameworks de Python 3.6, un script Install Certificates.command se implementa e instala en /Applications/Python 3.6/ . Ejecutarlo resolvió el problema, pero solo para pip3 .