Але якщо сама 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») означає , що ваш Python STDLIB sslмодуль, складений проти старого OpenSSL Lib, відсутня підтримка протоколу TLSv1.2 (навіть якщо бібліотека OpenSSL може або може бути оновлена пізніше).
На щастя, це можна вирішити без оновлення Python (і всієї системи), встановивши додаткові додаткові пакети Python - детальна покрокова інструкція доступна тут, на Stackoverflow .
Зверніть увагу, curlі pipта wgetвсе залежить від того ж OpenSSL Lib для створення SSL підключення (використовуйте $ openssl versionкоманду). libcurl підтримує TLS 1.2, починаючи з curl версії 7.34 , але старіші версії curl повинні бути в змозі підключитися, якщо у вас була версія OpenSSL 1.0.2 (або новіша версія).
PS
Для Python 3 , будь ласка, використовуйте python3та pip3скрізь (якщо ви не знаходитесь у venv / virtualenv), включаючи curlкоманду зверху :
$ curl https://bootstrap.pypa.io/get-pip.py | python3 --user