python-2.7 debian pip pyopenssl urllib3

python 2.7 - Parche pyopenssl para el problema sslv3



install python pyopenssl (7)

Tengo un problema en un sistema Debian 8 con python 2.7.9-2 amd64:

marius@pydev:/usr/lib/python2.7/dist-packages/urllib3/contrib$ pip search doo Traceback (most recent call last): File "/usr/bin/pip", line 9, in <module> load_entry_point(''pip==1.5.6'', ''console_scripts'', ''pip'')() File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 356, in load_entry_point return get_distribution(dist).load_entry_point(group, name) File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 2476, in load_entry_point return ep.load() File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 2190, in load [''__name__'']) File "/usr/lib/python2.7/dist-packages/pip/__init__.py", line 74, in <module> from pip.vcs import git, mercurial, subversion, bazaar # noqa File "/usr/lib/python2.7/dist-packages/pip/vcs/mercurial.py", line 9, in <module> from pip.download import path_to_url File "/usr/lib/python2.7/dist-packages/pip/download.py", line 22, in <module> import requests, six File "/usr/local/lib/python2.7/dist-packages/requests/__init__.py", line 53, in <module> from .packages.urllib3.contrib import pyopenssl File "/usr/local/lib/python2.7/dist-packages/requests/packages/urllib3/contrib/pyopenssl.py", line 73, in <module> ssl.PROTOCOL_SSLv3: OpenSSL.SSL.SSLv3_METHOD, **AttributeError: ''module'' object has no attribute ''PROTOCOL_SSLv3''**

Me registré en la biblioteca e intenté parchear /usr/local/lib/python2.7/dist-packages/requests/packages/urllib3/contrib/pyopenssl.py

from .. import connection from .. import util __all__ = [''inject_into_urllib3'', ''extract_from_urllib3''] # SNI only *really* works if we can read the subjectAltName of certificates. HAS_SNI = SUBJ_ALT_NAME_SUPPORT # Map from urllib3 to PyOpenSSL compatible parameter-values. _openssl_versions = { ssl.PROTOCOL_SSLv23: OpenSSL.SSL.SSLv23_METHOD, **ssl.PROTOCOL_SSLv3: OpenSSL.SSL.SSLv3_METHOD,** ssl.PROTOCOL_TLSv1: OpenSSL.SSL.TLSv1_METHOD, } _openssl_verify = { ssl.CERT_NONE: OpenSSL.SSL.VERIFY_NONE, ssl.CERT_OPTIONAL: OpenSSL.SSL.VERIFY_PEER, ssl.CERT_REQUIRED: OpenSSL.SSL.VERIFY_PEER + OpenSSL.SSL.VERIFY_FAIL_IF_NO_PEER_CERT, }

¿Podría alguien aclararme cómo puedo solucionar esto? Sería súper increíble si alguien tuviera una pista. Busqué en Google el problema y solo encontré parches incompletos y es desordenado. Probablemente también sea un caso para el rastreador de errores una vez que esto se solucione. Tengo este problema para todos los paquetes de Python.


Esto es realmente un problema con urllib3 , no con pyopenssl . Debian últimamente compila OpenSSL sin soporte SSLv3 , y urllib3 simplemente asumió que el soporte estaba allí.

El problema se solucionó en commit b9b3b0102, que es parte de la versión 1.10 de urllib3 .

Como está utilizando urllib3 como parte de las requests , que a su vez es utilizado por pip , debería ser suficiente para actualizar a una versión reciente de las requests . Al momento de escribir, la versión actual es 2.6.0 que contiene la solución:

# pip install requests==2.6.0

Puede encontrar un problema al actualizar las requests , debido al problema del huevo de gallina. Para solucionar esto, puede intentar eliminar temporalmente el paquete pyopenssl , actualizar las requests y reinstalar pyopenssl .

Además, es posible que desee utilizar la siguiente línea para actualizar pip antes de intentar actualizar las requests :

# sudo easy_install --upgrade pip


Me encontré con este problema hoy con Ansible. Lo resolví con: pip uninstall pyopenssl

tal vez esto ayude a alguien más en la misma situación


Me encontré con esto en un nuevo Xenial y no tuve éxito con muchas respuestas que había visto (algunas realmente no lo intenté porque la mayoría de mi software estaba más actualizado). Lo que finalmente lo resolvió para mí fue: solicitudes de instalación de sudo pip: actualización ... que es solo un giro en la otra recomendación de actualización de solicitud.


Me encuentro con los mismos problemas y solo desinstalo la versión de las requests e instalo la versión exacta usando el siguiente comando.

pip install requests==2.6.0

entonces funciona


Otra forma de solucionar el problema es usar

sudo easy_install --upgrade pip

y usar pip normalmente después


Recibí el mismo error.
En conjunción con las respuestas anteriores:

sudo easy_install --upgrade pip

También tuve que correr:

sudo pip uninstall pyopenssl sudo pip install mozdownload

Esto solucionó mi error, tal vez pueda ayudar a otros. Vine aquí buscando en Google:

AttributeError: el objeto ''módulo'' no tiene atributo ''PROTOCOL_SSLv3''


Recibí este error después de una actualización de Ubuntu 14 a 16. La actualización cambió algunas rutas de Python, lo que rompió algunos paquetes principales. Esta respuesta esencialmente lo arregló para mí.

sudo apt-get purge python-pkg-resources sudo apt-get -f install sudo rm -Rf /usr/local/bin/pip sudo apt-get install python-pip sudo pip install -U pip