Не удалось установить пакеты 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):
-
Запустите виртуальную среду с оболочкой. (замените "./venv/bin/activate" на свой собственный путь)
source ./venv/bin/activate
-
Запустить обновление
curl https://bootstrap.pypa.io/get-pip.py | python
-
Перезапустите свой экземпляр 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, и она работает для меня!
В заключение о решении моего:
-
Проверьте, что pip.ini (обычно по пути C:\ProgramData\pip
) был изменен;
-
Если да на шаге 1, попробуйте сбросить его до конфигурации по умолчанию.
Ответ 14
myenv:
Python 2.7.14
пип 9.0.1
Mac OSX 10.9.4
mysolution:
-
загрузите get-pip.py
вручную с https://packaging.python.org/tutorials/install-packages/
-
запустить 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