Невозможно установить пакеты 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
Возможный дубликат Unable для установки библиотек Python
phd

Ответы:

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 в настройках .

Anupam
источник
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 и пакеты в своем домашнем каталоге, как описано в этом разделе .

HBAR
источник
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

Vithulan
источник
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

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

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

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

ключевой момент
источник
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
pokkie
источник
1

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

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

curl https://bootstrap.pypa.io/get-pip.py | sudo /Users/{your user name}/{path to python}/bin/python
user9825640
источник
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, попробуйте сбросить его до конфигурации по умолчанию.

Lyn
источник
1

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

Томаш Залуски
источник
1

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

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

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

pip3 install pandas --user
HoKy22
источник