Pero si el curl
comando en sí falla con un error, o si la "versión del protocolo de alerta tlsv1" persiste incluso después de la actualización pip
, significa que la versión de biblioteca de OpenSSL subyacente < 1.0.1
o la versión de Python < 2.7.9
(o < 3.4
en Python 3) no son compatibles con el protocolo TLS 1.2 más reciente que pip
necesita conectarse a PyPI desde hace aproximadamente un año . Puede verificarlo fácilmente en el intérprete de Python:
>>> import ssl
>>> ssl.OPENSSL_VERSION
'OpenSSL 0.9.8o 01 Jun 2010'
>>> ssl.PROTOCOL_TLSv1_2
AttributeError: 'module' object has no attribute 'PROTOCOL_TLSv1_2'
El AttributeError
(en lugar del esperado '5') significa que su ssl
módulo stdlib de Python , compilado contra el antiguo openssl lib, carece de soporte para el protocolo TLSv1.2 (incluso si la biblioteca openssl puede o podría actualizarse más adelante).
Afortunadamente, se puede resolver sin actualizar Python (y todo el sistema), instalando manualmente paquetes adicionales de Python: la guía detallada paso a paso está disponible aquí en Stackoverflow .
Tenga en cuenta, curl
y pip
, y wget
todos dependen de la misma lib OpenSSL para establecer conexiones SSL (uso $ openssl version
de comandos). libcurl admite TLS 1.2 desde la versión curl 7.34 , pero las versiones anteriores de curl deberían poder conectarse si tenía OpenSSL versión 1.0.2 (o posterior).
PD
Para Python 3 , use python3
y en pip3
todas partes (a menos que esté en un venv / virtualenv), incluido el curl
comando de arriba :
$ curl https://bootstrap.pypa.io/get-pip.py | python3 --user