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

167

Estoy tratando de instalar una biblioteca Python usando pip, obteniendo un error 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
fuente
1
Sigue esta respuesta stackoverflow.com/a/46808948/2419644
Mitul Shah

Respuestas:

443

Pip de actualización de la siguiente manera:

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

Nota: es posible que deba usar lo sudo pythonanterior si no está en un entorno virtual.

(Tenga en cuenta que la actualización pipusando, pipes decir pip install --upgrade pip, tampoco lo actualizará correctamente. Es solo un problema de gallina y huevo. pipNo funcionará a menos que use TLS> = 1.2.)

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

Desde la página de estado de Python:

Completado : los apagones continuos han finalizado y TLSv1.0 y TLSv1.1 se han deshabilitado. 11 de abril, 15:37 UTC


Para usuarios de PyCharm (virtualenv):

  1. Ejecutar entorno virtual con shell. (reemplace "./venv/bin/activate" en 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
fuente
2
¡Esto funcionó para mí! Tuve que agregar sudoal frente debido a errores de permiso denegado. ¡Gracias!
Simar
34
Requiere sudo para trabajar: curl https://bootstrap.pypa.io/get-pip.py | sudo python
Wallace
2
@Simar @Wallace sí, puede requerir sudosi no en un entorno virtual. Agregó ese bit también en la respuesta ahora.
Anupam
1
Si no está en un entorno virtual, es posible que deba especificar la ruta a su binario de Python, como Ilya menciona a continuación
Chris
2
En OSX esto funcionó mejor para mícurl https://bootstrap.pypa.io/get-pip.py | sudo -H python3
nick fox
26

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

Alex C.
fuente
44
También me di cuenta de que tenía que ejecutar pip3, no solo pip: ¡compruebe la versión con el comando -Vpara asegurarse de que está ejecutando el pip correcto!
Jan
9

Seguir la respuesta de @ Anupam en OS X resultó en el siguiente error para mí, independientemente de los permisos con los que lo ejecuté:

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

Lo que finalmente funcionó fue descargar un paquete pip más nuevo (9.0.3) desde 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
fuente
7

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

curl https://bootstrap.pypa.io/get-pip.py | sudo /Users/{your user name}/{path to python}/bin/python
Ilya Gazman
fuente
6

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 paquetes bajo su directorio de inicio como se describe en este resumen .

Hbar
fuente
5

La siguiente solución funcionó para mí:

brew install python2

También se actualizó pipa la versión 1.10.1

Monish Lalchandani
fuente
^ este para aquellos de nosotros que no usamos el python predeterminado en OSX. Supongo que la pregunta no era específica de OSX, pero de todos modos, si no está ejecutando Linux, esto funciona --- a menos que esté escribiendo contenido sobre Python instalado en el sistema.
jar
Este funcionó para mí, uso Python en OSX. Mi situación me pasó una semana intentando instalar cualquier paquete pip y falló. Desinstalé pip y desde este momento no puedo hacer nada hasta que recibí este comando que instaló pip para mí. ¡Gracias!
amm
3

Verifique su versión de TLS:

python2 -c "import urllib2,json; print(json.loads(urllib2.urlopen('https://www.howsmyssl.com/a/check').read())['tls_version'])"

Si su versión de TLS es inferior a 1.2, debe actualizarla ya que el repositorio de PyPI se encuentra en un período de caída de la capacidad de desvalorización de TLS temprana.

Fuente: es hora de actualizar su Python: TLS v1.2 pronto será obligatorio

Puede actualizar la versión de TLS con el siguiente comando:

sudo apt-get update && sudo apt-get install openssl libssl-dev

Esto debería solucionar tu problema. ¡Buena suerte!

EDITAR: puede descargar paquetes utilizando su propio repositorio privado de paquetes de Python, independientemente de la versión de TLS. Depósito privado de paquetes de Python

Vithulan
fuente
2

Esto funcionó para mí. Agregar sudo antes de python

curl https://bootstrap.pypa.io/get-pip.py |sudo python
Caña Sugoi
fuente
2

Para usuarios de Python2 WIN10:

1. Desinstale Python a fondo, incluya todas las carpetas.

2. Busque e instale el último python-2.7.msi (ver 2.7.15)

3. Después del paso 2, es posible que pip también se haya instalado.

4. Ahora, si su sistema no ha cambiado, puede usar pip para instalar paquetes ahora. La "versión del protocolo de alerta tlsv1" no aparecerá.

Optimus Prime
fuente
2

Intenté todas las soluciones existentes y no funcionó para mí.

Vuelvo a instalar Python 2.7 (también instalaré pip) descargando .pkg en https://www.python.org/downloads/mac-osx/

funciona para mí después de la instalación descargada paquete

punto clave
fuente
2

Me encontré con este problema también. El problema subyacente es que la biblioteca ssl en Python 2.7 versiones <2.7.9 ya no es compatible con el mecanismo pip.

Si está ejecutando en Windows y (como nosotros) no puede actualizar fácilmente desde una versión incompatible de 2.7, FWIW, descubrí que si copia los siguientes archivos desde otra instalación de la última versión de Python (por ejemplo, Python 2.7. 15) en otra máquina para su instalación:

    Lib\ssl.py
    libs\_ssl.lib
    DLLs\_ssl.dll

efectivamente "actualizará" su capa SSL a una que sea compatible; pudimos usar pip nuevamente, incluso para actualizar pip.

W. Sadkin
fuente
2

Las respuestas de instalar pip a través de:

  1. curl https://bootstrap.pypa.io/get-pip.py |sudo python o
  2. curl https://bootstrap.pypa.io/get-pip.py | python

no funcionó para mí, ya que seguía recibiendo el error:

Could not fetch URL https://pypi.org/simple/pip/: There was a problem confirming the ssl certificate: HTTPSConnectionPool(host='pypi.org', port=443): Max retries exceeded with url: /simple/pip/ (Caused by SSLError("Can't connect to HTTPS URL because the SSL module is not available.",)) - skipping
ERROR: Could not find a version that satisfies the requirement pip (from versions: none)
ERROR: No matching distribution found for pip

Tuve que instalar pipmanualmente a través de:

  1. Ir al sitio web depip distribución
  2. Descargue la tar.gzversión
  3. Descomprima el archivo localmente y cden el directorio
  4. correr python setup.py install
pokkie
fuente
1

Esto funcionó para mí, instalé la última versión de pip y luego instalé la biblioteca ( ciscoconfparse ).

Pip de actualización:

curl https://bootstrap.pypa.io/get-pip.py | sudo /Users/{your user name}/{path to python}/bin/python
usuario9825640
fuente
1

myenv:

Python 2.7.14

pip 9.0.1

mac osx 10.9.4


mi solución:

  1. Descargar get-pip.pymanualmente desde https://packaging.python.org/tutorials/installing-packages/

  2. correr python get-pip.py


referencias:

https://github.com/pypa/warehouse/issues/3293#issuecomment-378468534

https://packaging.python.org/tutorials/installing-packages/

Descargar de forma segura get-pip.py [1]

Ejecute python get-pip.py. [2] Esto instalará o actualizará pip. Además, instalará las herramientas de configuración y la rueda si aún no están instaladas.

Asegúrese de que el pip, las herramientas de configuración y la rueda estén actualizados

Si bien pip solo es suficiente para instalar desde archivos binarios preconstruidos, las copias actualizadas de las herramientas de configuración y los proyectos de rueda son útiles para garantizar que también pueda instalar desde archivos fuente:

python -m pip install --upgrade pip setuptools wheel

Nick Dong
fuente
1

También encontré este problema en mi Windows10 e intenté todas las respuestas, pero no resolví mi problema.

C: \ python367 \ Scripts> pip install Flask

Recopilación de Flask No se pudo encontrar una versión que satisfaga el requisito Flask (de las versiones:) No se encontró una distribución coincidente para Flask

Después de eso, encuentro que el archivo de configuración de pip había sido modificado. Entonces, configuré la pip.iniconfiguración predeterminada original, volví a ejecutar el comando pip y ¡funciona para mí!

En resumen de la solución mía:

  1. Verifique que pip.ini (generalmente debajo de la ruta C:\ProgramData\pip) haya sido modificado;

  2. En caso afirmativo en el paso 1, intente restablecerlo a una configuración predeterminada.

Lyn
fuente
1

O simplemente la biblioteca requerida simplemente no está en el repositorio. Soy un novato de Python y todos los consejos sobre la actualización de pip finalmente se muestran como engañosos. Solo tenía que buscar en https://pypi.org/ , encontrar que la biblioteca (flujo de aire en mi caso) se detuvo en alguna versión antigua, después de lo cual fue renombrada. Sí, también esa solución tonta también es posible :-).

Tomáš Záluský
fuente
1

Para todos los usuarios python3y pip3por ahí:

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

y luego asuma que quiere instalar pandas

pip3 install pandas --user
HoKy22
fuente