web-dev-qa-db-fra.com

Impossible d'installer Python packages [SSL: TLSV1_ALERT_PROTOCOL_VERSION]

J'essaie d'installer une bibliothèque Python à l'aide de pip, en 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 pip: pip 9.0.1

Comment puis-je corriger cette erreur?

161
Nishant Nawarkhede

Mettez à niveau pip comme suit:

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

Remarque: vous devrez peut-être utiliser Sudo python ci-dessus si vous ne l'utilisez pas dans un environnement virtuel.

(Notez que la mise à niveau de pip à l'aide de pip c'est-à-dire pip install --upgrade pip ne sera pas mise à niveau correctement. Il s'agit simplement d'un problème relatif aux œufs de poule. pip ne fonctionnera pas si vous utilisez 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 support arrêté pour les versions TLS 1.0 et 1.1.

Depuis la page d'état Python:

Completed - Les baisses actives sont terminées et TLSv1.0 et TLSv1.1 ont été désactivés. 11 avril, 15h37 UTC


Pour les utilisateurs de PyCharm (virtualenv):

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

    source ./venv/bin/activate
    
  2. Exécuter la mise à niveau

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

423
Anupam

Mais si la commande curl échoue elle-même avec une erreur ou si "la version du protocole d'alerte tlsv1" persiste même après la mise à niveau de pip, signifie que la version <1.0.1 ou Python version <2.7.9 de votre système d'exploitation (ou <3.4 dans Python 3) ne prend pas en charge le nouveau protocole TLS 1.2 dont pip doit se connecter à PyPI depuis il y a environ un an . Vous pouvez facilement le vérifier dans Python interprète:

>>> 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'

La AttributeError (au lieu de '5' attendu) signifie que votre module Python stdlib ssl, compilé avec l'ancienne bibliothèque openssl, ne prend pas en charge le protocole TLSv1.2 (même si le La bibliothèque openssl peut ou peut être mise à jour plus tard).

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

Remarque, curl et pip et wget dépendent tous de la même bibliothèque OpenSSL pour l'établissement de connexions SSL (utilisez la commande $ openssl version). libcurl supporte TLS 1.2 depuis la version curl 7.34 , mais les anciennes versions curl devrait être capable de se connecter si vous disposiez d'OpenSSL version 1.0 .2 (ou plus tard).


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

25
Alexey C.

Suite à la réponse de @ Anupam sur OS X, l'erreur suivante s'est produite pour moi, quelles que soient les autorisations avec lesquelles je l'ai exécuté:

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

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

pip install ./pip-9.0.3/

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

9
T Dub

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 se pose si vous conservez votre pip et vos paquets dans votre répertoire personnel, comme décrit dans la section this Gist .

6
Hbar

La solution suivante a fonctionné pour moi:

brew install python2

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

5

La solution de @ Anupam a fonctionné pour moi. Cependant, je devais utiliser Sudo et spécifier l'emplacement exact de mon environnement virtuel Python:

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

Vérifiez votre version de TLS:

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

Si votre version de 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 tension générant la dépréciation de la version précédente de TLS.

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 à l'aide de votre propre référentiel de packages privé python, quelle que soit la version de TLS. Privé Python Référentiel de packages

3
Vithulan

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

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

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

2
keypoint

Pour les utilisateurs de Python2 WIN10:

1. Désinstallez python à fond, incluez tous les dossiers.

2. Récupérez et installez la dernière version de 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é modifié, vous pouvez utiliser pip pour installer les paquets maintenant. La "version du protocole d'alerte tlsv1" n'apparaîtra pas.

2
Optimus Prime

J'ai rencontré ce problème aussi. Le problème sous-jacent est que la bibliothèque ssl de Python 2.7 versions <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 une version incompatible de FWIW 2.7, j'ai constaté 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 de votre installation:

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

il va effectivement "mettre à niveau" votre couche SSL à celle qui est supportée; nous pouvions alors utiliser à nouveau pip, même pour le mettre à niveau.

2
W. Sadkin

Cela a fonctionné pour moi. Ajouter Sudo avant le python

curl https://bootstrap.pypa.io/get-pip.py |Sudo python
2
Sugoi Reed

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

C:\python367\Scripts> pip install Flask

Collecting Flask Impossible de trouver une version qui réponde à l'exigence Flask (à partir de versions:) Aucune distribution correspondante trouvée pour Flask.

Après cela, je trouve que le fichier de configuration pip a été modifié. Donc, j'ai défini le pip.ini comme configuration par défaut, relancez la commande pip et ça marche pour moi!

En résumé de la solution du mien:

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

  2. Si vous avez répondu oui à l'étape 1, essayez de rétablir la configuration par défaut.

1
lyn

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

Pip de mise à niveau:

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

Ou simplement, la bibliothèque requise n'est tout simplement pas dans le référentiel. Je suis Python débutant et tous les conseils concernant la mise à niveau de pip apparaissent finalement comme trompeurs. Il me suffisait de regarder https://pypi.org/ , pour trouver la bibliothèque (le flux d'air dans mon cas) arrêtée à une ancienne version, après laquelle elle a été renommée. Oui, cette solution idiote est également possible :-).

1

myenv:

python 2.7.14

pip 9.0.1

mac osx 10.9.4


mysolution:

  1. téléchargez get-pip.py manuellement à partir de https://packaging.python.org/tutorials/installing-packages/

  2. lancer 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] Ceci installera ou mettra à niveau pip. De plus, il installera setuptools et wheel s'ils ne sont pas déjà installés.

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

Bien que pip seul soit suffisant pour installer à partir d'archives binaires pré-construites, des copies à jour des projets setuptools et wheel sont utiles pour vous permettre également d'installer à partir d'archives sources:

python -m pip install --upgrade pip setuptools wheel

1
Nick Dong

Pour tous les utilisateurs python3 et pip3:

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

et supposons ensuite que vous souhaitez installer des pandas

pip3 install pandas --user
0
HoKy22