Но если сама 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