Попытка установить пакеты с Python 3.7.2 пип приводит к ошибкам TSL / SSL - PullRequest
0 голосов
/ 22 января 2019

Я работаю на:

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

Многопитоновая среда.На нем установлены как Python 2.7.15, так и 3.7.2.

Regular (Python2) pip работает без заминок.

Когда я пытаюсь запустить pip3 install flask, я получаю следующие ошибки:

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

Та же ошибка появляется, если я пытаюсь установить любой другой пакет.

pip3 версия 18.1

Добавление --trusted-host pypi.org не помогает.

Установка CA-сертификатов не помогла

Python 3 установлен согласно следующему руководству: https://stackoverflow.com/a/8112006/8826349

РЕДАКТИРОВАТЬ: я теперь заметил, что при запуске make на Python 3, он закончилуспешно, но выдает следующее сообщение:

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:

Кажется, моя проблема идентична this .Однако поток не предоставляет никаких решений, помимо описания проблемы.

Я пытался скомпилировать более новую версию openssl, используя это руководство.Но более новая версия openssl не решила мою проблему.

EDIT3:

Мне не удалось найти решение этой проблемы.

Похоже, что версия Amazon для Linux не работает с Python 3.

У них есть другая ОС, называемая Amazon Linux 2, где установка Python 3 так же проста, как и запуск yum install python3

Однако в Amazon Linux 2 есть свои проблемы.Это Python 2 установки не хватает pip.Вы можете установить его вручную, запустив:

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

Но это на самом деле переопределяет pip3, поэтому Python 3 остается без pip.

Ответы [ 2 ]

0 голосов
/ 02 февраля 2019

Итак, SSLError («Не удается подключиться к URL-адресу HTTPS, поскольку модуль SSL недоступен.») В этом контексте означает, что когда вы компилировали python3.7 из исходников, он не был связан с вашей системной библиотекой OpenSSL. Педантичным решением было бы гарантировать, что у вас есть необходимые заголовки помимо lib, с чем-то вроде:
$ yum install openssl-devel.x86_64 openssl.x86_64
и перекомпилировать с нуля, связавшись с библиотекой OpenSSL.

Однако, как вы правильно заметили, установка python3 с помощью yum (из собственного репозитория Amazon, пакетов, протестированных для Amazon Linux) является более простым и надежным подходом в EC2 и устранит все зависимости. Например, что-то вроде этого будет работать в Amazon Linux (версия 1):

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

Обычно Python3.6 уже предустановлен в EC2, но не python36-pip ...

Это правильное поведение по умолчанию, при котором pip-скрипт Python3 вызывается командой pip3, тогда как pip для Python2 (если установлен - пакет yum для python2 - это python27-pip.noarch), например:

$ 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)  

Существуют также версионные команды Python в сочетании с ключом -m (для модуля) для запуска соответствующей версии pip, например:
$ python3 -m pip install --user flask

Тот, который вы установили через get-pip.py --user, скорее всего, попал куда-то в ваш каталог $ HOME / .local / bin. Переключатель --user устанавливает пакеты только для текущего пользователя (в ~ / .local / lib /), а не для всей системы, что на самом деле является хорошей практикой, позволяющей избежать вмешательства в системные пакеты python.

Более того, вы можете использовать pip в изолированных средах virtualenv или venv: есть python36-virtualenv (устанавливается через yum) и модуль по умолчанию 'venv', встроенный в Python3 и доступный (python3 -m venv yournewenvname). После того, как вы создадите и активируете свою изолированную среду Python (каталог), вы можете просто сделать простой pip install flask там, независимо от версии Python. Удачи!

0 голосов
/ 22 января 2019

Вы можете игнорировать ошибку ssl или установить open-ssl.Вы должны попробовать этот ответ.

...