J'ai un problème sur un système Debian 8 avec 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'**
J'ai consulté la bibliothèque et essayé de corriger /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,
}
Quelqu'un pourrait-il m'expliquer comment je peux résoudre ce problème? Ce serait génial si quelqu'un avait un indice. J'ai googlé le problème et n'ai trouvé que des correctifs incomplets et c'est compliqué. Probablement un cas pour le traqueur de bogues une fois que cela est corrigé, aussi. J'ai ce problème pour tous les paquets Python.
C'est en fait un problème avec urllib3
, pas avec pyopenssl
. Debian compile dernièrement OpenSSL sans le support de SSLv3 }, et urllib3
suppose simplement que le support était là.
Le problème était corrigé dans la validation b9b3b0102 } qui fait partie de la version 1.10 de urllib3
.
Comme vous utilisez urllib3
dans le cadre de requests
, qui est à son tour utilisé par pip
, il devrait suffire de mettre à jour une version récente de requests
. Au moment de l'écriture, la version actuelle est la 2.6.0 qui contient le correctif:
# pip install requests==2.6.0
Il est possible que vous rencontriez un problème lors de la mise à niveau requests
, à cause du problème poulet-œuf. Pour résoudre ce problème, vous pouvez essayer de supprimer temporairement le package pyopenssl
, de mettre à niveau requests
et de réinstaller pyopenssl
.
De plus, vous pouvez utiliser la ligne suivante pour mettre à jour pip
avant d'essayer de mettre à jour requests
:
# Sudo easy_install --upgrade pip
Une autre façon de résoudre le problème est d'utiliser
Sudo easy_install --upgrade pip
et utilisez pip normalement ensuite
J'ai reçu la même erreur.
En conjonction avec les réponses précédentes:
Sudo easy_install --upgrade pip
J'ai aussi dû courir:
Sudo pip uninstall pyopenssl
Sudo pip install mozdownload
Cela corrige mon erreur, peut-être que cela peut aider les autres. Je suis venu ici en googlant:
AttributeError: l'objet 'module' n'a pas d'attribut 'PROTOCOL_SSLv3'
J'ai rencontré ce problème aujourd'hui avec Ansible. Je l'ai résolu avec:
pip uninstall pyopenssl
peut-être que cela aidera quelqu'un d'autre dans la même situation
J'ai reçu cette erreur après une mise à niveau d'Ubuntu 14 à 16. La mise à niveau a modifié certains chemins Python, ce qui a cassé certains packages principaux. Cette réponse essentiellement résolu pour moi.
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
Je rencontre les mêmes problèmes et je viens de désinstaller la version de requests
et d’installer la version exacte à l’aide de la commande suivante.
pip install requests==2.6.0
alors ça marche
J'ai rencontré ce problème sur un nouveau Xenial et j'ai échoué avec beaucoup de réponses que j'avais vues (certaines que je n'ai pas vraiment essayées car la plupart de mes logiciels étaient plus récents). Ce qui a finalement été résolu pour moi, c’était: les demandes d’installation de pipo Sudo --upgrade ..., ce qui n’est qu’un détail par rapport à l’autre recommandation de mise à niveau des demandes.