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


167

J'essaie d'installer une bibliothèque Python en utilisant pip, obtenant 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 corriger cette erreur?



Réponses:


443

Mettez à niveau pip comme suit:

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

Remarque: vous devrez peut-être utiliser sudo pythonci-dessus si ce n'est dans un environnement virtuel.

(Notez que la mise pipà niveau avec pipie pip install --upgrade pipne le mettra pas à niveau correctement. C'est juste un problème de poule et d'oeuf. pipNe 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é la prise en charge des versions 1.0 et 1.1 de TLS.

Depuis la page d'état Python:

Terminé - Les baisses de tension progressives sont terminées et TLSv1.0 et TLSv1.1 ont été désactivés. 11 avr, 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. Lancer la mise à niveau

    curl https://bootstrap.pypa.io/get-pip.py | python
  3. Redémarrez votre instance PyCharm et vérifiez votre interpréteur Python dans Preference .


2
Cela a fonctionné pour moi! J'ai dû ajouter sudoà l'avant en raison d'erreurs de permission refusées. Merci!
Simar

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

2
@Simar @Wallace ouais, peut exiger sudosi ce n'est dans un environnement virtuel. Ajouté ce bit aussi dans la réponse maintenant.
Anupam

1
Si vous n'êtes pas dans un environnement virtuel, vous devrez peut-être spécifier le chemin d'accès à votre binaire python, comme Ilya le mentionne ci
Chris

2
Sur OSX, cela fonctionnait mieux pour moicurl https://bootstrap.pypa.io/get-pip.py | sudo -H python3
nick fox

26

Mais si la curlcommande elle-même échoue avec une erreur, ou si "la version du protocole d'alerte tlsv1" persiste même après la mise à niveau pip, cela signifie que la version de la bibliothèque OpenSSL sous-jacente de votre système d'exploitation < 1.0.1ou la version Python < 2.7.9(ou < 3.4dans Python 3) ne prend pas en charge le nouveau protocole TLS 1.2 qui pipdoit 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 du '5' attendu) signifie que votre sslmodule Python stdlib , compilé avec l'ancienne bibliothèque openssl, ne prend pas en charge le protocole TLSv1.2 (même si la bibliothèque openssl peut ou pourrait être mise à jour plus tard).

Heureusement, il peut être résolu sans mettre à niveau 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 .

Remarque, curlet pipet wgetdépendent tous de la même bibliothèque OpenSSL pour l'établissement des connexions SSL (utilisez la $ openssl versioncommande). libcurl prend en charge TLS 1.2 depuis la version 7.34 de curl , mais les anciennes versions de curl devraient pouvoir se connecter si vous aviez OpenSSL version 1.0.2 (ou ultérieure).


PS
Pour Python 3 , veuillez utiliser python3et pip3partout (sauf si vous êtes dans un venv / virtualenv), y compris la curlcommande ci - dessus :
$ curl https://bootstrap.pypa.io/get-pip.py | python3 --user


4
J'ai également réalisé que je devais exécuter pip3, pas seulement pip- vérifier la version avec la commande -Vpour m'assurer que vous exécutiez le bon pip !!
janvier

9

Suivre la réponse de @ Anupam sur OS X a entraîné l'erreur suivante pour moi, quelles que soient les autorisations avec lesquelles je l'ai exécuté:

Impossible d'installer les packages en raison d'une erreur d'environnement: [Errno 13] Autorisation refusée: ...

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

pip install ./pip-9.0.3/

Cela a corrigé mes [SSL: TLSV1_ALERT_PROTOCOL_VERSION]erreurs.


7

La solution de @Anupam a fonctionné pour moi. Cependant, j'ai dû utiliser sudoet spécifier l'emplacement exact de mon environnement Python virtuel:

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

6

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

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

Ce problème survient si vous conservez votre pip et vos packages dans votre répertoire personnel, comme décrit dans ce résumé .


5

La solution suivante a fonctionné pour moi:

brew install python2

Il a également mis pipà niveau vers la version 1.10.1


^ celui-ci pour ceux d'entre nous qui n'utilisent pas le python par défaut sur OSX. Je suppose que la question n'était pas spécifique à OSX, mais de toute façon, si vous n'utilisez pas Linux, cela fonctionne - à moins que vous ne vous contentiez d'écrire sur le système Python installé.
pot

Celui-ci a fonctionné pour moi, j'utilise le python sur OSX. Ma situation J'ai passé une semaine à essayer d'installer n'importe quel package pip et cela a échoué. J'ai désinstallé pip et à partir de ce moment, je ne peux rien faire tant que je n'ai pas reçu cette commande qui a installé pip pour moi. Je vous remercie!
amm

3

Vérifiez votre version TLS:

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

Si votre version TLS est inférieure à 1.2, vous devez la mettre à niveau car le référentiel PyPI est sur une période de baisse de disponibilité de TLS précoce.

Source - Il est temps de mettre à niveau votre Python: TLS v1.2 sera bientôt obligatoire

Vous pouvez mettre à niveau la version TLS à l'aide de la commande suivante:

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

Cela devrait résoudre votre problème. Bonne chance!

EDIT: Vous pouvez télécharger des packages en utilisant votre propre référentiel de packages Python privé, quelle que soit la version de TLS. Référentiel de packages Python privé


2

Cela a fonctionné pour moi. Ajouter sudo avant python

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

2

Pour les utilisateurs de Python2 WIN10:

1. désinstallez soigneusement python, incluez tous les dossiers.

2. récupérez et installez le dernier python-2.7.msi (ver 2.7.15)

3.Après l'étape 2, vous constaterez peut-être que pip a également été installé.

4. Maintenant, si votre system'env n'a pas été changé, vous pouvez utiliser pip pour installer les paquets maintenant. La "version du protocole d'alerte tlsv1" n'apparaîtra pas.



2

J'ai également rencontré ce problème. Le problème sous-jacent est que la bibliothèque ssl dans les versions Python 2.7 <2.7.9 n'est plus compatible avec le mécanisme pip.

Si vous utilisez Windows et que vous (comme nous) ne pouvez pas facilement mettre à niveau à partir d'une version incompatible de 2.7, FWIW, j'ai trouvé que si vous copiez les fichiers suivants à partir d'une autre installation de la dernière version de Python (par exemple Python 2.7. 15) sur une autre machine à votre installation:

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

il "améliorera" efficacement votre couche SSL vers une couche prise en charge; nous avons alors pu à nouveau utiliser pip, même pour mettre à niveau pip.


2

Les réponses de l'installation de pip via:

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

n'a pas fonctionné pour moi car j'ai continué à obtenir l'erreur:

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

J'ai dû installer pipmanuellement via:

  1. Allez sur le site depip distribution
  2. Téléchargez la tar.gzversion
  3. Décompressez le fichier localement et cddans le répertoire
  4. courir python setup.py install

1

Cela a fonctionné pour moi, j'ai installé la dernière version de pip puis installé la bibliothèque ( ciscoconfparse ).

Mise à niveau de pip:

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

1

myenv:

python 2.7.14

pip 9.0.1

mac osx 10.9.4


mysolution:

  1. télécharger get-pip.pymanuellement depuis https://packaging.python.org/tutorials/installing-packages/

  2. courir python get-pip.py


réfs:

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

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

Télécharger en toute sécurité get-pip.py [1]

Exécutez python get-pip.py. [2] Cela installera ou mettra à jour pip. De plus, il installera setuptools et wheel s'ils ne sont pas déjà installés.

Assurez-vous que pip, setuptools et roue sont à jour

Alors que pip seul suffit à installer à partir d'archives binaires prédéfinies, des copies à jour des projets setuptools et wheel sont utiles pour vous assurer que vous pouvez également installer à partir des archives source:

python -m pip install --upgrade pip setuptools wheel


1

J'ai également rencontré ce problème sur mon windows10 et j'ai essayé toutes les réponses mais je n'ai pas résolu mon problème.

C: \ python367 \ Scripts> pip install Flask

Collecting Flask Impossible de trouver une version satisfaisant à l'exigence Flask (à partir des versions :) Aucune distribution correspondante trouvée pour Flask

Après cela, je trouve que le fichier de configuration de pip a été modifié. Donc, j'ai défini la pip.iniconfiguration par défaut d'origine, réexécutez la commande pip et cela fonctionne pour moi!

En résumé de ma solution:

  1. Vérifiez que le pip.ini (généralement sous le chemin C:\ProgramData\pip) a été modifié;

  2. Si oui à l'étape 1, essayez de le réinitialiser à une configuration par défaut.


1

Ou simplement la bibliothèque requise n'est tout simplement pas dans le dépôt. Je suis novice en Python et tous les conseils sur la mise à niveau de pip ont finalement été révélés trompeurs. Je devais juste regarder dans https://pypi.org/ , trouvant la bibliothèque (airflow dans mon cas) arrêtée à une ancienne version, après quoi elle a été renommée. Oui, cette solution idiote est également possible :-).


1

Pour tous les utilisateurs python3et pip3là-bas:

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

puis supposez que vous voulez installer des pandas

pip3 install pandas --user
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.