web-dev-qa-db-fra.com

Essayer d'installer des packages avec Python 3.7.2 pip provoque des erreurs TLS / SSL

Je cours sur:

Amazon Linux AMI 2018.03.0

Linux ip-xxx-yy-z-ww 4.14.77-70.59.amzn1.x86_64 #1 SMP Mon Nov 12 22:02:45 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

Environnement multi-python. Il a les deux Python 2.7.15 et 3.7.2 installés.

Le pip régulier (Python2) fonctionne sans accroc.

Lorsque j'essaie d'exécuter pip3 install flask J'obtiens les erreurs suivantes:

pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.
Collecting flask
  Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError("Can't connect to HTTPS URL because the SSL module is not available.")': /simple/flask/
  Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError("Can't connect to HTTPS URL because the SSL module is not available.")': /simple/flask/
  Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError("Can't connect to HTTPS URL because the SSL module is not available.")': /simple/flask/
  Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError("Can't connect to HTTPS URL because the SSL module is not available.")': /simple/flask/
  Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError("Can't connect to HTTPS URL because the SSL module is not available.")': /simple/flask/
  Could not fetch URL https://pypi.org/simple/flask/: There was a problem confirming the ssl certificate: HTTPSConnectionPool(Host='pypi.org', port=443): Max retries exceeded with url: /simple/flask/ (Caused by SSLError("Can't connect to HTTPS URL because the SSL module is not available.")) - skipping
  Could not find a version that satisfies the requirement flask (from versions: )
No matching distribution found for flask
pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.
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

La même erreur apparaît si j'essaie d'installer un autre package.

la version pip3 est 18.1

Ajouter --trusted-Host pypi.org n'aide pas.

L'installation de certificats CA n'a pas aidé

Python 3 installé selon le guide suivant: https://stackoverflow.com/a/8112006/8826349

EDIT: J'ai maintenant remarqué que lors de l'exécution de make sur Python 3, il s'est terminé avec succès, mais avait le message suivant:

Python build finished successfully!
The necessary bits to build these optional modules were not found:
_hashlib              _ssl                  _tkinter
_uuid
To find the necessary bits, look in setup.py in detect_modules() for the module's name.


The following modules found by detect_modules() in setup.py, have been
built by the Makefile instead, as configured by the Setup files:
_abc                  atexit                pwd
time


Could not build the ssl module!
Python requires an OpenSSL 1.0.2 or 1.1 compatible libssl with X509_VERIFY_PARAM_set1_Host().
LibreSSL 2.6.4 and earlier do not provide the necessary APIs, https://github.com/libressl-portable/portable/issues/381

EDIT2:

Mon problème semble être identique à this . Cependant, le thread ne fournit aucune solution au-delà de la description du problème.

J'ai essayé de compiler une nouvelle version de openssl en utilisant le guide this . Mais la nouvelle version d'OpenSL n'a pas résolu mon problème.

EDIT3:

Je n'ai pas pu trouver de solution à ce problème.

Il semble que la version Linux d'Amazon ne fonctionne pas bien avec Python 3.

Ils ont un système d'exploitation différent, appelé Amazon Linux 2, où installer Python 3 est aussi simple que d'exécuter yum install python3

Cependant, Amazon Linux 2 a ses propres problèmes. C'est Python 2 installation manque pip. Vous pouvez l'installer manuellement en exécutant:

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

Mais cela remplace réellement pip3, donc alors Python 3 reste sans pip.

8
AlexM

Ainsi, SSLError ("Impossible de se connecter à l'URL HTTPS car le module SSL n'est pas disponible.") Dans ce contexte indique que lorsque vous avez compilé python3.7 à partir de sources, il n'était pas lié à votre bibliothèque OpenSSL système. La solution pédante serait de vous assurer d'avoir les en-têtes requis en plus de la lib, avec quelque chose comme:
$ yum install openssl-devel.x86_64 openssl.x86_64
et recompiler à partir de zéro, en établissant une liaison avec la bibliothèque OpenSSL.

Cependant, comme vous l'avez noté à juste titre, l'installation de python3 avec yum (à partir du propre référentiel d'Amazon, des packages testés pour Amazon Linux) est une approche beaucoup plus facile et plus robuste dans EC2, et résoudra toutes les dépendances. Par exemple, quelque chose comme ça va fonctionner dans Amazon Linux (version 1):

$ yum install python36.x86_64
$ yum install python36-pip.noarch

Habituellement, Python3.6 est déjà préinstallé dans EC2, mais pas python36-pip ...

C'est le comportement correct et par défaut que le script pip de Python3 est appelé par pip3, tandis que pip est pour Python2 (s'il est installé - le paquet yum pour python2 est python27-pip.noarch), par exemple:

$ pip3 -V  
pip 9.0.1 from /usr/local/lib/python3.6/site-packages (python 3.6)  
$ pip2 -V  
pip 9.0.1 from /usr/local/lib/python2.7/site-packages (python 2.7)  
$ pip -V  
pip 9.0.1 from /usr/local/lib/python2.7/site-packages (python 2.7)  

Il existe également des versions Python disponibles en combinaison avec le commutateur -m (pour le module) pour exécuter la version correspondante de pip, par exemple:
$ python3 -m pip install --user flask

Celui que vous avez installé via get-pip.py --user a probablement atterri quelque part dans votre répertoire $ HOME/.local/bin. Le --user switch installe les packages uniquement pour l'utilisateur actuel (dans ~/.local/lib /) plutôt que pour l'ensemble du système, ce qui est en fait une bonne pratique pour éviter d'interférer avec le système python .

Encore mieux, vous pouvez utiliser pip dans un environnement isolé virtualenv ou venv: il y a le python36-virtualenv (installable via yum), et le module par défaut 'venv' intégré Python3 et facilement disponible (python3 -m venv yournewenvname). Une fois que vous avez créé puis activé votre environnement isolé python (un répertoire), vous pouvez simplement faire un simple pip install flask là indépendamment de python. Bonne chance!

3
Alex C.

Vous pouvez ignorer l'erreur ssl ou installer l'open-ssl. Vous devriez essayer this answer.

0
Razib Hossain Shuvo