Но если сама curl
команда завершается с ошибкой или «версия протокола оповещения tlsv1» сохраняется даже после обновления pip
, это означает, что базовая версия библиотеки OpenSSL вашей операционной системы < 1.0.1
или версия Python < 2.7.9
(или < 3.4
в Python 3) не поддерживает более новый протокол TLS 1.2 который pip
должен подключиться к PyPI примерно год назад . Вы можете легко проверить это в интерпретаторе Python:
>>> 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'
AttributeError
(Вместо ожидаемого «5») означает , что ваш STDLIB Pythonssl
модуль, составленный против старого OpenSSL Lib, отсутствует поддержка протокола TLSv1.2 (даже если библиотека OpenSSL может или может быть обновлена позже).
К счастью, это можно решить без обновления Python (и всей системы), вручную установив дополнительные пакеты Python - подробное пошаговое руководство доступно здесь, в Stackoverflow .
Обратите внимание, curl
и pip
и wget
все зависит от того же OpenSSL Lib для создания SSL подключения (используйте $ openssl version
команду). libcurl поддерживает TLS 1.2 начиная с версии 7.34 curl , но более старые версии curl должны иметь возможность подключаться, если у вас была версия OpenSSL 1.0.2 (или более поздняя).
PS
Для Python 3 , пожалуйста, используйте python3
и pip3
везде (если вы не в venv / virtualenv), включая curl
команду сверху :
$ curl https://bootstrap.pypa.io/get-pip.py | python3 --user