Pero si el curlcomando 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.1o la versión de Python < 2.7.9(o < 3.4en Python 3) no son compatibles con el protocolo TLS 1.2 más reciente que pipnecesita 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 sslmó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, curly pip, y wgettodos dependen de la misma lib OpenSSL para establecer conexiones SSL (uso $ openssl versionde 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 python3y en pip3todas partes (a menos que esté en un venv / virtualenv), incluido el curlcomando de arriba :
$ curl https://bootstrap.pypa.io/get-pip.py | python3 --user