173 votes

Impossible d'installer les packages Python [SSL: TLSV1_ALERT_PROTOCOL_VERSION]

Je suis en train d'essayer d'installer une bibliothèque Python en utilisant pip, mais je rencontre une erreur 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

Version de pip: pip 9.0.1

Comment puis-je corriger cette erreur?

1 votes

Suivez cette réponse stackoverflow.com/a/46808948/2419644

0 votes

0 votes

Assurez-vous d'avoir la version correcte d'openssl. Ensuite, recompilez le Python avec le chemin openssl.

448voto

Anupam Points 7016

Améliorez pip comme suit :

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

Note : Vous devrez peut-être utiliser sudo python ci-dessus si vous n'êtes pas dans un environnement virtuel.

(Notez que la mise à jour de pip en utilisant pip c'est-à-dire pip install --upgrade pip ne la mettra pas correctement à jour non plus. C'est simplement un problème de poule et d'œuf. pip ne fonctionnera pas à moins d'utiliser TLS >= 1.2.)

Comme mentionné dans cette réponse détaillée, cela est dû à la récente dépréciation de TLS pour pip. Les sites Python.org ont arrêté de supporter les versions TLS 1.0 et 1.1.

Depuis la page de statut Python :

Terminé - Les coupures d'électricité temporaires sont terminées, et TLSv1.0 et TLSv1.1 ont été désactivés. 11 avr. 2018, 15:37 UTC

Pour les utilisateurs de PyCharm (virtualenv) :

  1. Exécutez l'environnement virtuel avec le shell. (remplacez "./venv/bin/activate" par votre propre chemin)

    source ./venv/bin/activate
  2. Exécutez la mise à jour

    curl https://bootstrap.pypa.io/get-pip.py | python
  3. Redémarrez votre instance PyCharm, et vérifiez votre interprète Python dans les Préférences.

2 votes

Cela a fonctionné pour moi! J'ai dû ajouter sudo au début en raison des erreurs de permission refusée. Merci!

34 votes

Nécessite sudo pour fonctionner: curl https://bootstrap.pypa.io/get-pip.py | sudo python

2 votes

@Simar @Wallace oui, peut nécessiter sudo si ce n'est pas dans un environnement virtuel. J'ai également ajouté cette information dans ma réponse maintenant.

29voto

Alex C. Points 2639

Mais si la commande curl échoue avec une erreur, ou que "tlsv1 alert protocol version" persiste même après la mise à jour de pip, cela signifie que la version de la bibliothèque OpenSSL sous-jacente de votre système d'exploitation1.0.1 ou la version de Python2.7.9 (ou3.4 en Python 3) ne prend pas en charge le protocole TLS 1.2 plus récent dont pip a besoin pour se connecter à PyPI depuis environ un an. Vous pouvez facilement le vérifier dans l'interpréteur 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'

Le AttributeError (au lieu de '5' attendu) signifie que le modulessl de la bibliothèque standard Python, compilé contre une ancienne bibliothèque openssl, ne prend pas en charge le protocole TLSv1.2 (même si la bibliothèque openssl peut être mise à jour plus tard).

Heureusement, cela peut être résolu sans mettre à jour Python (et tout le système), en installant manuellement des packages Python supplémentaires -- le guide détaillé étape par étape est disponible ici sur Stackoverflow.

À noter, curl et pip et wget dépendent tous de la même bibliothèque OpenSSL pour établir des connexions SSL (utilisez la commande $ openssl version). libcurl prend en charge TLS 1.2 depuis la version curl 7.34, mais les anciennes versions de curl devraient pouvoir se connecter si vous avez la version OpenSSL 1.0.2 (ou ultérieure).


P.S.
Pour Python 3, veuillez utiliser python3 et pip3 partout (sauf si vous êtes dans un venv/virtualenv), y compris la commande curl de ci-dessus :
$ curl https://bootstrap.pypa.io/get-pip.py | python3 --user

5 votes

J'ai aussi réalisé que je devais exécuter pip3, pas seulement pip - vérifiez la version avec la commande -V pour vous assurer que vous utilisez le bon pip !!

9voto

T Dub Points 91

Suite à la réponse de @Anupam sur OS X, j'ai obtenu l'erreur suivante, peu importe les autorisations avec lesquelles je l'ai exécutée :

Impossible d'installer les packages en raison d'une EnvironmentError: [Errno 13] Permission refusée: ...

Ce qui a finalement fonctionné a été de télécharger un nouveau package pip (9.0.3) directement depuis PyPI à partir de mon navigateur - https://pypi.org/simple/pip/, extraire le contenu, puis installer le package localement avec pip :

pip install ./pip-9.0.3/

Cela a réglé mes erreurs [SSL: TLSV1_ALERT_PROTOCOL_VERSION].

7voto

Ilya_Gazman Points 3685

@Anupam's solution worked for me. However, I had to use sudo and specify the exact location of my virtual Python environment:

curl https://bootstrap.pypa.io/get-pip.py | sudo /Users/{votre nom d'utilisateur}/{chemin vers python}/bin/python

6voto

Hbar Points 187

Pour mettre à jour la version locale, j'ai utilisé une variante légère :

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

Ce problème survient si vous gardez votre pip et vos packages sous votre répertoire personnel comme décrit dans ce gist.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X