Не удается обновить pip 1.5.4 в Ubuntu 14.04 - InsecurePlatformWarning: настоящий объект SSLContext недоступен - PullRequest
0 голосов
/ 27 ноября 2018

В настоящее время я использую pip версии 1.5.4 в Ubuntu 14.04 и python 2.7.6 и не могу обновить pip до последней версии.

Когда я запускаю pip install --upgrade pip, я получаю следующую ошибку:

Cannot fetch index base URL https://pypi.python.org/simple/ Could not find any downloads that satisfy the requirement pip in ./.venv/lib/python2.7/site-packages Downloading/unpacking pip Cleaning up... No distributions at all found for pip in ./.venv/lib/python2.7/site-packages Storing debug log for failure in /home/buffcat/.pip/pip.log

И когда я пытаюсь обновить с помощью get-pip.py, я получаюследующая ошибка ssl:

/tmp/tmpKVfWOr/pip.zip/pip/_vendor/urllib3/util/ssl_.py:369: SNIMissingWarning: An HTTPS request has been made, but the SNI (Server Name Indication) extension to TLS is not available on this platform. This may cause the server to present an incorrect TLS certificate, which can cause validation failures. You can upgrade to a newer version of Python to solve this. For more information, see https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings /tmp/tmpKVfWOr/pip.zip/pip/_vendor/urllib3/util/ssl_.py:160: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. You can upgrade to a newer version of Python to solve this. For more information, see https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLError(1, '_ssl.c:510: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed'),)': /simple/pip/

Что я могу сделать, чтобы обновить pip на моей машине?

1 Ответ

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

Хотя не рекомендуется для обновления системы Ubuntu pip (тот, что входит в поставляемый дистрибутив Ubuntu python-pip пакет debian), минуя apt-get, это допустимо сделать в venv/ virtualenv или на уровне домашнего каталога вашего пользователя (опция --user pip).Этот способ позволяет использовать его без конфликта с «системным» пипом.Кажется, вы работали внутри virtualenv, что является хорошей практикой.

Ошибка SSLE вызвана тем, что базовая версия библиотеки OpenSSL вашей системы <1.0.1 и версия Python <2.7.9 неподдерживать более новую версию протокола <a href="https://pyfound.blogspot.com/2017/01/time-to-upgrade-your-python-tls-v12.html" rel="nofollow noreferrer"> TLS 1.2 , которую PyPI ожидает примерно год назад.И поэтому pip не может больше подключаться к PyPI по старым протоколам SSL / TLS.
Вы можете проверить версии с помощью:
$ python -c "import ssl; print(ssl.OPENSSL_VERSION)" && openssl version
Ошибка может быть воспроизведена даже без pip, с чем-то вроде:
$ curl -i https://pypi.org/simple/ --tlsv1
curl: (35) ошибка: 1409442E: Подпрограммы SSL: SSL3_READ_BYTES: версия протокола оповещения tlsv1

Поскольку pip не может подключиться к PyPI, мыможно обновить его вручную:

  • В Firefox откройте индекс пакетов Python официальную веб-страницу и найдите проект pip ,
  • Выбрать "Загрузить файлы »- здесь есть прямая ссылка: https://pypi.org/project/pip/#files
  • Щелкните по последнему файлу пакета pip в формате wheel ( .whl ) для загрузки,
  • Установите в venv / virtualenv, над которым вы работали, например:

        $ source bin/activate
        (venv) $ pip install --no-index ~/Downloads/pip-19.0.1-py2.py3-none-any.whl
        (venv) $ pip --version
         pip 19.0.1 from ...
    

Но обновление / установка более новой версии pip - это наполовинубитва.Чтобы он мог подключаться к PyPI, нам нужно устранить основную причину: InsecurePlatformWarning .. Caused by SSLError .. SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version'.Чтобы это исправить, вам нужно вручную установить (таким же образом) дополнительные пакеты, кроме pip.Подробное пошаговое руководство по Stackoverflow: Невозможно установить пакеты Python с помощью pip в Ubuntu Linux: InsecurePlatformWarning, SSLError, версия протокола оповещения tlsv1

...