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?

Nishant Nawarkhede
la source
1
Suivez cette réponse stackoverflow.com/a/46808948/2419644
Mitul Shah
Possible duplicata de Impossible d'installer les bibliothèques python
doctorat

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 .

Anupam
la source
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

Alex C.
la source
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.

T Dub
la source
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
Ilya Gazman
la source
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é .

Hbar
la source
5

La solution suivante a fonctionné pour moi:

brew install python2

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

Monish Lalchandani
la source
^ 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é

Vithulan
la source
2

Cela a fonctionné pour moi. Ajouter sudo avant python

curl https://bootstrap.pypa.io/get-pip.py |sudo python
Sugoi Reed
la source
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.

Optimus Prime
la source
2

J'ai essayé tous les correctifs existants et ne fonctionne pas pour moi

Je réinstalle python 2.7 (installe également pip) en téléchargeant .pkg à https://www.python.org/downloads/mac-osx/

fonctionne pour moi après l'installation téléchargé pkg

point clé
la source
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.

W. Sadkin
la source
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
Pokkie
la source
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
user9825640
la source
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

Nick Dong
la source
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.

lyn
la source
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 :-).

Tomáš Záluský
la source
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
HoKy22
la source