Невозможно установить пакеты Python [SSL: TLSV1_ALERT_PROTOCOL_VERSION]


167

Я пытаюсь установить библиотеку 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

версия пипа: пип 9.0.1

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


1
Следуйте этому ответу stackoverflow.com/a/46808948/2419644
Mitul Shah

Ответы:


443

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

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

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

(Обратите внимание, что обновление pipс помощью pipie 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
Это сработало для меня! Я должен был добавить sudoна фронте из-за ошибок в разрешении. Спасибо!
Симар

34
Требуется sudo для работы: curl https://bootstrap.pypa.io/get-pip.py | sudo python
Уоллес

2
@Simar @ Уоллес, да, может потребоваться, sudoесли не в виртуальной среде. Добавил и этот бит в ответ.
Анупам

1
Если вы не находитесь в виртуальной среде, вам может потребоваться указать путь к вашему двоичному файлу Python, как упоминает Илья ниже
Chris

2
На OSX это работало лучше для меняcurl https://bootstrap.pypa.io/get-pip.py | sudo -H python3
Ник Фокс

26

Но если сама 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») означает , что ваш STDLIB Pythonssl модуль, составленный против старого OpenSSL Lib, отсутствует поддержка протокола TLSv1.2 (даже если библиотека OpenSSL может или может быть обновлена позже).

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

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


4
Я также понял, что мне нужно запустить pip3, а не просто pipпроверить версию с командой, -Vчтобы убедиться, что вы выполняете правильный пункт!
января

9

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


7

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

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

6

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

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

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


5

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

brew install python2

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


^ этот для тех из нас, кто не использует Python по умолчанию в OSX. Я предполагаю, что вопрос не был специфичен для OSX, но в любом случае, если вы не используете Linux, это работает - если вы не пишете поверх установленного Python.
банка

Этот работал для меня, я использую Python на OSX. Моя ситуация, я потратил неделю, пытаясь установить любой pip-пакет, и это не удалось. Я удалил pip и с этого времени ничего не могу сделать, пока не получу команду, которая установила pip для меня. Спасибо!
AMM

3

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


2

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

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

2

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

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

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

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

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



2

Я столкнулся с этой проблемой также. Основная проблема заключается в том, что библиотека 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.


2

Ответы по установке pip через:

  1. curl https://bootstrap.pypa.io/get-pip.py |sudo python или
  2. curl https://bootstrap.pypa.io/get-pip.py | python

не работал для меня, поскольку я продолжал получать ошибку:

Could not fetch URL https://pypi.org/simple/pip/: There was a problem confirming the ssl certificate: HTTPSConnectionPool(host='pypi.org', port=443): Max retries exceeded with url: /simple/pip/ (Caused by SSLError("Can't connect to HTTPS URL because the SSL module is not available.",)) - skipping
ERROR: Could not find a version that satisfies the requirement pip (from versions: none)
ERROR: No matching distribution found for pip

Мне пришлось установить pipвручную через:

  1. Перейти pip сайт распространения
  2. Скачать tar.gz версию
  3. Распакуйте файл локально и cd в каталог
  4. бегать python setup.py install

1

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

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

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

1

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


1

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

C: \ python367 \ Scripts> pip install Flask

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

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

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

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

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


1

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


1

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

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

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

pip3 install pandas --user
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.