Not able to install Python packages [SSL: TLSV1_ALERT_PROTOCOL_VERSION]
Не удается установить пакеты Python [SSL: TLSV1_ALERT_PROTOCOL_VERSION]
Я пытаюсь установить библиотеку Python с помощью pip, получаю ошибку SSL:
~/projects/base pre-master± pip install xdict
Collecting xdict Could not fetch URL https://pypi.python.org/simple/xdict/: There was a problem confirming the ssl certificate: [SSL: TLSV1_ALERT_PROTOCOL_VERSION] tlsv1 alert protocol version (_ssl.c:590) - skipping Could not find a version that satisfies the requirement xdict (from versions: ) No matching distribution found for xdict
Примечание: Возможно, вам потребуется использовать sudo python выше, если не в виртуальной среде.
(Обратите внимание, что обновление pip с помощью pip i.e pip install --upgrade pip также не приведет к его правильному обновлению. Это просто проблема с курицей и яйцом. pip не будет работать, если не использовать TLS >= 1.2.)
Перезапустите экземпляр PyCharm и проверьте свой интерпретатор Python в настройках.
Ответ 2
Но если 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, не поддерживает протокол TLSv1.2 (даже если библиотека openssl может быть обновлена позже).
К счастью, это можно решить без обновления Python (и всей системы), вручную установив дополнительные пакеты Python - подробное пошаговое руководство доступно здесь, на Stackoverflow.
Обратите внимание, curl и pip и wget все зависят от одной и той же библиотеки OpenSSL для установления SSL-соединений (используйте $ openssl version команду). libcurl поддерживает TLS 1.2 начиная с версии curl 7.34, но более старые версии curl должны иметь возможность подключения, если у вас OpenSSL версии 1.0.2 (или более поздней).
P.S. Для Python 3, пожалуйста, используйте python3 и pip3 везде (если вы не находитесь в venv / virtualenv), включая curl команду из выше:
После ответа @ Anupam в OS X у меня возникла следующая ошибка, независимо от разрешений, с которыми я ее запускал:
Не удалось установить пакеты из-за ошибки среды: [Ошибка 13] В разрешении отказано: ...
В конечном итоге сработало загрузить более новый пакет pip (9.0.3) из PyPI прямо из моего браузера - https://pypi.org/simple/pip /, извлечь содержимое, а затем локально установить пакет pip:
pip install ./pip-9.0.3/
Это исправило мои [SSL: TLSV1_ALERT_PROTOCOL_VERSION] ошибки.
Ответ 4
Решение @Anupam сработало для меня. Однако мне пришлось использовать sudo и указать точное местоположение моей виртуальной среды Python:
curl https://bootstrap.pypa.io/get-pip.py | sudo /Users/{your user name}/{path to python}/bin/python