No se pueden instalar paquetes de Python [SSL: TLSV1_ALERT_PROTOCOL_VERSION]

Resuelto Nishant Nawarkhede asked hace 6 años • 17 respuestas

Estoy intentando instalar una biblioteca de Python usando pipy aparece un error de SSL:

~/projects/base  pre-master±  pip install xdict

Collecting xdict
  Could not fetch URL https://pypi.python.org/simple/xdict/: There was a problem confirming the ssl certificate: [SSL: TLSV1_ALERT_PROTOCOL_VERSION] tlsv1 alert protocol version (_ssl.c:590) - skipping
  Could not find a version that satisfies the requirement xdict (from versions: )
No matching distribution found for xdict

versión de pip: pip 9.0.1

¿Cómo soluciono este error?

Nishant Nawarkhede avatar Apr 11 '18 14:04 Nishant Nawarkhede
Aceptado

Actualice pip de la siguiente manera:

curl https://bootstrap.pypa.io/get-pip.py | python

Nota: Es posible que necesite utilizar sudo pythonlo anterior si no está en un entorno virtual.

(Tenga en cuenta que actualizar pipusando pipie pip install --upgrade piptampoco lo actualizará correctamente. Es solo una cuestión del huevo y la gallina. pipNo funcionará a menos que use TLS >= 1.2.)

Como se menciona en esta respuesta detallada , esto se debe a la reciente desaprobación de TLS para pip. Los sitios Python.org han dejado de admitir las versiones 1.0 y 1.1 de TLS.

Desde la página de estado de Python:

Completado : las caídas de tensión continuas han finalizado y TLSv1.0 y TLSv1.1 se han desactivado. 11 de abril a las 15:37 UTC


Para usuarios de PyCharm (virtualenv):

  1. Ejecute el entorno virtual con shell. (reemplace "./venv/bin/activate" por su propia ruta)

    source ./venv/bin/activate
    
  2. Ejecutar actualización

    curl https://bootstrap.pypa.io/get-pip.py | python
    
  3. Reinicie su instancia de PyCharm y verifique su intérprete de Python en Preferencia .

Anupam avatar Apr 11 '2018 07:04 Anupam

Pero si el curlcomando en sí falla con un error, o la "versión del protocolo de alerta tlsv1" persiste incluso después de la actualización pip, significa que la versión de la biblioteca OpenSSL subyacente de su sistema operativo < 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 nuevo. que pipnecesita conectarse a PyPI desde hace aproximadamente un año . Puedes comprobarlo 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 '5' esperado) significa que su sslmódulo Python stdlib, compilado con la antigua biblioteca openssl, carece de soporte para el protocolo TLSv1.2 (incluso si la biblioteca openssl puede 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 que curly todos dependen de la misma biblioteca OpenSSL para establecer conexiones SSL (use pipel comando). libcurl admite TLS 1.2 desde la versión 7.34 de curl , pero las versiones anteriores de curl deberían poder conectarse si tenía OpenSSL versión 1.0.2 (o posterior).wget$ openssl version


PD:
Para Python 3 , utilice python3y pip3en todas partes (a menos que esté en venv/virtualenv), incluido el curlcomando de arriba :
$ curl https://bootstrap.pypa.io/get-pip.py | python3 --user

stop.climatechange.now avatar Apr 23 '2018 23:04 stop.climatechange.now

Seguir la respuesta de @Anupam en OS X me generó el siguiente error, independientemente de los permisos con los que lo ejecuté:

No se pudieron instalar paquetes debido a un EnvironmentError: [Errno 13] Permiso denegado:...

Lo que finalmente funcionó fue descargar un paquete pip más nuevo (9.0.3) de PyPI directamente desde mi navegador: https://pypi.org/simple/pip/ , extraer el contenido y luego instalar pip el paquete localmente:

pip install ./pip-9.0.3/

Esto solucionó mis [SSL: TLSV1_ALERT_PROTOCOL_VERSION]errores.

T Dub avatar Apr 27 '2018 16:04 T Dub

La solución de @Anupam funcionó para mí. Sin embargo, tuve que usar sudoy especificar la ubicación exacta de mi entorno virtual Python:

curl https://bootstrap.pypa.io/get-pip.py | sudo /Users/{your user name}/{path to python}/bin/python
Ilya Gazman avatar Apr 13 '2018 15:04 Ilya Gazman

Para actualizar la versión local utilicé una ligera variante:

curl https://bootstrap.pypa.io/get-pip.py | python - --user

Este problema surge si mantiene su pip y sus paquetes en su directorio de inicio como se describe en esta esencia .

Hbar avatar Apr 29 '2018 16:04 Hbar