Не удалось установить пакеты 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 version: pip 9.0.1

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

Ответ 1

Обновите пункт следующим образом:

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:

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


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

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

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

    curl https://bootstrap.pypa.io/get-pip.py | python
    
  3. Перезапустите свой экземпляр 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') означает, что ваш ssl модуль Python stdlib, скомпилированный со старой библиотекой openssl, не поддерживает протокол TLSv1.2 (даже если библиотека openssl может или может быть обновлена позже).

К счастью, это можно решить без обновления Python (и всей системы), вручную установив дополнительные пакеты Python - подробное пошаговое руководство fooobar.com/questions/16155773/....

Обратите внимание, что curl pip и wget зависят от одной и той же библиотеки OpenSSL для установления соединений 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

Ответ 3

После ответа @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].

Ответ 4

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

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

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

Ответ 5

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

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

Ответ 6

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

brew install python2

Он также обновил pip до версии 1.10.1

Ответ 7

Проверьте свою версию 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.

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

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

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

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

РЕДАКТИРОВАТЬ: Вы можете скачать пакеты, используя свой собственный личный репозиторий пакетов Python независимо от версии TLS. Закрытый репозиторий пакетов Python

Ответ 8

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

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

2. Загрузите и установите последнюю версию python-2.7.msi (версия 2.7.15).

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

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

Ответ 9

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

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

Ответ 10

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

Я переустанавливаю python 2.7 (также установлю pip), скачав .pkg по адресу https://www.python.org/downloads/mac-osx/

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

Ответ 11

Я столкнулся с этой проблемой также. Основная проблема заключается в том, что библиотека ssl в версиях Python 2.7 <2.7.9 больше не совместима с механизмом pip.

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

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

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

Ответ 12

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

Обновление протокола:

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

Ответ 13

Я также столкнулся с этой проблемой на моем windows10 и попробовал все ответы, но не решил мою проблему.

C:\python367\Scripts> pip install Flask

Сбор Flask Не удалось найти версию, которая удовлетворяет требованию Flask (из версий:) Не найдено соответствующего распределения для Flask

После этого я обнаружил, что файл конфигурации pip был изменен. Итак, я установил pip.ini как исходную конфигурацию по умолчанию, перезапустил команду pip, и она работает для меня!

В заключение о решении моего:

  1. Проверьте, что pip.ini (обычно по пути C:\ProgramData\pip) был изменен;

  2. Если да на шаге 1, попробуйте сбросить его до конфигурации по умолчанию.

Ответ 14

myenv:

Python 2.7.14

пип 9.0.1

Mac OSX 10.9.4


mysolution:

  1. загрузите get-pip.py вручную с https://packaging.python.org/tutorials/install-packages/

  2. запустить python get-pip.py


рефов:

https://github.com/pypa/warehouse/issues/3293#issuecomment-378468534

https://packaging.python.org/tutorials/installing-packages/

Безопасно скачать get-pip.py [1]

Запустите python get-pip.py. [2] Это установит или обновит пункт. Кроме того, он установит setuptools и wheel, если они еще не установлены.

Убедитесь, что pip, setuptools и wheel обновлены

В то время как одного pip достаточно для установки из предварительно собранных двоичных архивов, обновленные копии программ setuptools и wheel полезны для обеспечения возможности установки из исходных архивов:

python -m pip install --upgrade pip setuptools wheel

Ответ 15

Или просто нужной библиотеки просто нет в репо. Я новичок в Python, и все советы по обновлению pip, наконец, были введены в заблуждение. Я просто заглянул в https://pypi.org/ и обнаружил, что библиотека (в моем случае airflow) остановилась на какой-то старой версии, после чего она была переименована. Да, и это глупое решение также возможно :-).

Ответ 16

>     download get-pip.py manually from https://packaging.python.org/tutorials/installing-packages/
>     
>     run python get-pip.py

С вышеупомянутым решением я все еще сталкиваюсь с той же самой проблемой.

Не удалось получить URL-адрес https://pypi.org/simple/pip/: при подтверждении сертификата ssl возникла проблема: HTTPSConnectionPool (host = 'pypi.org', port = 443): максимальное число повторов превышено с помощью url: /simple/pip/(вызвано SSLError (SSLError ("плохое рукопожатие: SysCallError (-1," неожиданный EOF ")",),)) - пропуск

Похоже, я уже пропустил окно для обновления до TLS1.2

Может кто-нибудь, пожалуйста, предоставьте решение, это было несколько дней, и я застрял

Ответ 17

то, что наконец исправило это для меня, было отключением прокси-сервера, который я настроил на своем Chrome (чтобы я мог использовать отрыжку). я думаю, проходя через отрыжку испорченный с сертификатом ssl.

работал как шарм

Ответ 18

Для всех пользователей python3 и pip3:

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

а затем предположим, что вы хотите установить панд

pip3 install pandas --user