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?
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):
Exécutez l'environnement virtuel avec Shell. (remplacez "./venv/bin/activate" par votre propre chemin)
source ./venv/bin/activate
Exécuter la mise à niveau
curl https://bootstrap.pypa.io/get-pip.py | python
Redémarrez votre instance PyCharm et vérifiez votre interprète Python dans Préférence .
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
etpip
etwget
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 utiliserpython3
etpip3
partout (sauf si vous êtes dans un venv/virtualenv), y compris lecurl
commande de ci-dessus :$ curl https://bootstrap.pypa.io/get-pip.py | python3 --user
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]
.
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 .
La solution suivante a fonctionné pour moi:
brew install python2
Il a également mis à niveau pip
vers la version 1.10.1.
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
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
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
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.
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.
Cela a fonctionné pour moi. Ajouter Sudo avant le python
curl https://bootstrap.pypa.io/get-pip.py |Sudo python
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:
Vérifiez que le pip.ini (généralement sous le chemin C:\ProgramData\pip
) a été modifié;
Si vous avez répondu oui à l'étape 1, essayez de rétablir la configuration par défaut.
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
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 :-).
myenv:
python 2.7.14
pip 9.0.1
mac osx 10.9.4
mysolution:
téléchargez get-pip.py
manuellement à partir de https://packaging.python.org/tutorials/installing-packages/
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
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