Не удается установить пакеты 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

версия pip: pip 9.0.1

Как исправить эту ошибку?

12 127

12 ответов:

обновить pip следующим образом:

curl https://bootstrap.pypa.io/get-pip.py | python

Примечание: возможно, вам придется использовать sudo python выше, если не в виртуальной среде.

(обратите внимание, что обновление pip используя pip Я.е pip install --upgrade pip также не обновить его правильно. Это просто вопрос курицы и яйца. pip не будет работать, если не использовать TLS >= 1.2.)

как говорится в этот подробный ответ, это связано с недавним устареванием TLS для pip. Python.org сайты есть остановил поддержка для версий TLS 1.0 и 1.1.

со страницы состояния Python:

завершено - свертывая brownouts закончены, и TLSv1. 0 и В протоколе TLSv1.1 были отключены. 11 апреля, 15: 37 UTC


для пользователей PyCharm (virtualenv):

  1. запуск виртуальной среды с оболочкой. (заменять." /venv / bin / активировать" на свой собственный путь)

    source ./venv/bin/activate
    
  2. запустить обновление

    curl https://bootstrap.pypa.io/get-pip.py | python
    
  3. перезапустите экземпляр PyCharm и проверьте интерпретатор Python в предпочтения.

и для пользователей Python 3, curl должен быть передан в python3:

$ curl https://bootstrap.pypa.io/get-pip.py | python3

если любое из вышеуказанного curl команды не работают с тем же "TLSv1 alert protocol version" ошибки, пожалуйста обеспечить базовая библиотека OpenSSL вашей системы - это, по крайней мере, версия 1.0.1, для работы TLS v1.2.

как curl, так и pip (и wget) зависит от OpenSSL для установления SSL-соединения. Версию можно проверить с помощью $ openssl version команда.

сам libcurl поддерживает TLS 1.2 с версии curl 7.34, но более старые версии должны также иметь возможность подключения если у вас есть OpenSSL версии 1.0.2 (или более поздней), которая использует TLS 1.2 по умолчанию. Если вам не хватает таких инструментов, как curl, и вы не можете установить его, вы также можете скачать get-pip.py (или сам пакет pip) с помощью вашего любимая веб-браузер...

наконец, если все еще нет-идите, еще одна вещь, которая может помочь (особенно для более старых версий OS/Python), - это обеспечить установку следующих пакетов Python (зависимости, связанные с функционированием SSL и pip: pyasn1, certifi, asn1crypto, cryptography, pyOpenSSL, urllib3

вы можете проверить, какой из них отсутствует, попробовав этот импорт в интерпретатор Python:

>>> import pyasn1, certifi, asn1crypto, cryptography, OpenSSL, urllib3

потому что pip не может подключиться (пока), просто загрузите свои последние колеса с pypi.org через ваш любимая веб-браузер один за другим, и установить с помощью (или pip3 для Python 3) в том же порядке, как указано выше для разрешения зависимостей pip.

Примечание: ему должна предшествовать команда оболочки $ sudo apt-get install build-essential libssl-dev libffi-dev python-dev (или python3-dev в случае Python 3) чтобы гарантировать, что эти пакеты Python могут быть построены.

следующий ответ @Anupam на OS X привел к следующей ошибке для меня, независимо от разрешений, с которыми я его запускал:

не удалось установить пакеты из-за EnvironmentError: [Errno 13] отказано в разрешении: ...

что в конечном итоге сработало, так это загрузить новый пакет pip (9.0.3) из PyPI прямо из моего браузера -https://pypi.org/simple/pip/, извлеките содержимое, а затем pip установите пакет локально:

pip install ./pip-9.0.3/

это фиксированная моя [SSL: TLSV1_ALERT_PROTOCOL_VERSION] ошибки.

для меня сработало следующее решение:

brew install python2

Он также повышен pip для версии 1.10.1

@Anupamрешение работало для меня. Однако, я должен был использовать sudo и укажите точное местоположение моей виртуальной среды Python:

curl https://bootstrap.pypa.io/get-pip.py | sudo /Users/{your user name}/{path to python}/bin/python

для обновления локальной версии я использовал небольшой вариант:

curl https://bootstrap.pypa.io/get-pip.py | python - --user

эта проблема возникает, если вы храните свой pip и пакеты в своем домашнем каталоге, как описано в в этом суть.

для пользователей Python2 WIN10:

1.Удалите python полностью, включите все папки.

2.Извлеките и установите последний python-2.7.msi (ver 2.7.15)

3.После шага 2 Вы можете обнаружить, что pip тоже был установлен.

4.Теперь ,если ваш'env системы не были изменены,вы можете использовать pip для установки пакетов."Версия протокола оповещения tlsv1" не появится.

это сработало для меня, я установил последнюю версию pip, а затем установил библиотеку (ciscoconfparse).

обновление pip:

curl https://bootstrap.pypa.io/get-pip.py | sudo /Users/{your user name}/{path to python}/bin/python

это сработало для меня. Добавить sudo перед python

curl https://bootstrap.pypa.io/get-pip.py |sudo python

Я попробовал все существующие исправления и не работает для меня

я переустановил python 2.7 (также установит pip), загрузив .pkg at https://www.python.org/downloads/mac-osx/

работает для меня после установки скачал pkg

я столкнулся с этой проблемой. Основная проблема заключается в том, что библиотека ssl в Python 2.7 версии

Если вы работаете на Windows, и вы (как и мы) не можете легко обновить несовместимую версию 2.7, FWIW, я обнаружил, что если вы копируете следующие файлы из другой установки последней версии Python (например, Python 2.7.15) на другой машине для вашей установки:

    Lib\ssl.py
    libs\_ssl.lib
    DLLs\_ssl.dll

будет эффективно "обновите" свой SSL-слой до того, который поддерживается; затем мы снова сможем использовать pip, даже для обновления pip.

проверьте версию TLS:

python2 -c "import urllib2,json; print(json.loads(urllib2.urlopen('https://www.howsmyssl.com/a/check').read())['tls_version'])"

Если ваша версия TLS меньше 1.2, вы должны обновить ее, так как репозиторий PyPI находится на период ожидания устаревания раннего TLS.

источник время для обновления вашего Python: TLS v1. 2 скоро будет обязательным

Вы можете обновить версию TLS с помощью следующей команды:

sudo apt-get update && sudo apt-get install openssl libssl-dev

Это должно решить вашу проблему. Удачи вам!