Ya no puedo instalar ningún paquete de Python 2 usando pip en Ubuntu 12.04 LTS (Precise Pangolin)

Versión TLS

TLS 1.1 

Es hora de actualizar tu Python: TLS v1.2 pronto será obligatorio

Detalles del sistema operativo

 Distributor ID: Ubuntu Description: Ubuntu 12.04.2 LTS Release: 12.04 Codename: Precise Pangolin 

Versión de python

 Python 2.7.3 

Versión PIP

 pip 1.0 from /usr/lib/python2.7/dist-packages (python 2.7) 

Sé que hubo un problema con los certificados SSL de pip, y pude superar esto mediante el uso de la opción --index-url durante los últimos meses.

Pero ahora incluso esa opción tampoco está funcionando. A continuación se muestra el comando que utilicé para superar el problema de SSL.

instalación de pip –index-url = http://pypi.python.org/simple/ scapy

y

instalación de pip –index-url = https://pypi.python.org/simple/ scapy

Me sale el siguiente error para los dos comandos anteriores:

 Downloading/unpacking scapy Cannot fetch index base URL http://pypi.python.org/simple/ Could not find any downloads that satisfy the requirement scapy No distributions at all found for scapy Storing complete log in /root/.pip/pip.log 

¡Tampoco pude instalar ningún paquete de Python!

¿Cómo puedo solucionar este problema?


Cuando intenté aplicar esta solución como sugirió @phd, obtuve el siguiente error:

curl: (35) error: 1407742E: Rutinas SSL: SSL23_GET_SERVER_HELLO: versión del protocolo de alerta tlsv1

Solución rápida: las utilidades de paquetes de Ubuntu apt-cache y apt-get permiten buscar e instalar miles de paquetes comunes de Python ( $ sudo apt-get install python- ). Sin embargo, serán más antiguos de lo que viene de pip , algunos pueden no encontrarse en los repositorys de Ubuntu.

El error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version se puede reproducir ejecutando pip con -v (para verbosidad), junto con SSLError , No distributions found , los Max retries exceeded mensajes.

Python para Linux utiliza la biblioteca OpenSSL suministrada por el sistema. curl y pip (y wget ) también dependen del sistema OpenSSL para establecer conexiones SSL (use el comando $ openssl version ). Pero el soporte de TLS 1.1 ya no es suficiente para pip. TLS v1.2 requiere OpenSSL 1.0.1 (o posterior) para funcionar, pero generalmente se recomienda un mínimo de OpenSSL 1.0.2.

El libcurl de Curl admite TLS 1.2 desde la versión 7.34 de curl, pero las versiones anteriores de curl deberían poder conectarse solo si tenía la versión 1.0.2 de OpenSSL (o posterior). Por lo tanto, los comandos pip y curl que ha intentado fallan porque la versión de la biblioteca OpenSSL subyacente del sistema operativo está por debajo de 1.0.1 (consulte el comando $ openssl version ) que no es compatible con TLS 1.2. Para verlo en 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' 

Otra parte del problema es que Python <2.7.9 (o <3.4 en Python3) tiene un módulo ssl que no admite PROTOCOL_TLSv1_2, por lo que pip no puede usarlo, incluso si openssl está actualizado. En los repositorys de Ubuntu, Python 2.7.9 apareció por primera vez en 15.04 (Vivid Vervet), y Python 3.4.2 en 14.10 (Utopic Unicorn), lo que significa que no puede actualizar el sistema Python de forma segura sin actualizar todos los componentes de su sistema operativo. Las versiones 2.7.9+ y 3.4+ de Python incluyen un pip más nuevo de forma predeterminada .

Tienes suerte en el sentido de que con Ubuntu 12.04 es una versión anterior de LTS (soporte a largo plazo), siempre tienes la opción apt-get upgrade todo tu sistema operativo y saltar directamente a la próxima versión de LTS que actualizaría todo desde OpenSSL a Python y sus módulos de todo el sistema. En su versión exacta del repository Ubuntu 12.04 (Precise Pangolin), OpenSSL 1.0.1-4 está disponible (actualizaciones de seguridad), por lo que puede probar $ sudo apt-get update && sudo apt-get install openssl libssl-dev pero puede conduzca a la actualización del sistema por dependencias, y no tiene sentido sin la actualización de Python de todos modos. Mantener intacta la versión original de Python enviada por Ubuntu permite evitar que se rompan las dependencias porque muchos componentes del sistema operativo dependen de la versión de Python enviada por el sistema operativo.

Puede comstackr desde fonts su propio OpenSSL que no sea del sistema, y ​​luego su Python independiente que no es del sistema, vinculándolo con el OpenSSL que acaba de comstackr, pero este enfoque requiere la instalación de más paquetes “-dev” de Debian, y puede ser inviable. Debido a diversas limitaciones.

Afortunadamente, todo se puede resolver sin comstackr o actualizar Python (y todo el sistema), instalando varios paquetes de Python manualmente. La guía detallada paso a paso está disponible aquí en Stackoverflow . La rueda manylinux1 de criptografía incluye la biblioteca OpenSSL vinculada más estáticamente que habilitará pip (v10 +) y le permitirá continuar usando Ubuntu 12.04 sin mayores problemas de actualización.