Але якщо сама 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