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

версія pip: pip 9.0.1

Як виправити цю помилку?


1
Дотримуйтесь ця відповідь stackoverflow.com/a/46808948/2419644
Mitul Шах

Відповіді:


443

Оновіть піп таким чином:

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

Примітка. Можливо, вам потрібно буде використовувати sudo pythonвище, якщо не у віртуальному середовищі.

(Зверніть увагу, що оновлення pipза допомогою pipie pip install --upgrade pipтакож не оновить його належним чином. Це лише проблема з куркою-яйцем. pipНе буде працювати, якщо не використовувати TLS> = 1.2.)

Як згадується в цій детальній відповіді , це пов'язано з недавньою депресією TLS для піп. Сайти 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
Для роботи curl https://bootstrap.pypa.io/get-pip.py | sudo python
Уоллес

2
@Simar @Wallace Так, може знадобитися sudoякщо не у віртуальному середовищі. Додано цей біт, як і у відповідь зараз.
Анупам

1
Якщо ви не знаходитесь у віртуальному середовищі, можливо, вам потрібно буде вказати шлях до бінарного пітона, як згадує Ілля нижче
Кріс

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

На щастя, це можна вирішити без оновлення Python (і всієї системи), встановивши додаткові додаткові пакети Python - детальна покрокова інструкція доступна тут, на Stackoverflow .

Зверніть увагу, curlі pipта wgetвсе залежить від того ж OpenSSL Lib для створення SSL підключення (використовуйте $ openssl versionкоманду). libcurl підтримує TLS 1.2, починаючи з curl версії 7.34 , але старіші версії 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] У дозволі відмовлено: ...

У кінцевому підсумку працювало - це завантажити новіший пакет піп (9.0.3) з PyPI безпосередньо з мого браузера - https://pypi.org/simple/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 для мене. Дякую!
ам.

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.

Джерело - Час для оновлення вашого Python: TLS v1.2 незабаром стане обов’язковим

Ви можете оновити версію TLS за допомогою наступної команди:

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

Це повинно вирішити вашу проблему. Удачі!

РЕДАКТУВАННЯ: Ви можете завантажувати пакунки за допомогою власного приватного сховища пакунків python незалежно від версії TLS. Приватний сховище пакетів Python


2

Це працювало для мене. Додайте судо перед пітоном

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.Зараз, якщо ваша система'env не змінена, ви можете використовувати 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.


1

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

Оновлення піп:

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

1

myenv:

пітон 2.7.14

піп 9.0.1

mac osx 10.9.4


загальне рішення:

  1. завантажуйте get-pip.pyвручну з https://packaging.python.org/tutorials/installing-packages/

  2. бігати python get-pip.py


списки:

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

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

Безпечно завантажте get-pip.py [1]

Запустіть python get-pip.py. [2] Це встановить або оновить pip. Крім того, він встановить setuptools і колесо, якщо вони вже не встановлені.

Переконайтесь, що система pip, setuptools та колесо є актуальними

У той час як Pip достатньо для встановлення з попередньо вбудованих бінарних архівів, актуальні копії setuptools та колісних проектів корисні для того, щоб також можна було встановити з вихідних архівів:

python -m pip install --upgrade pip setuptools wheel


1

Я також потрапив на цю проблему на своєму windows10 і спробував усі відповіді, але не вирішив свою проблему.

C: \ python367 \ Scripts> pip install Flask

Збір колби Не вдалося знайти версію, яка б задовольняла вимогу Колба (від версій:) Не знайдено відповідного розподілу для колби

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

Підсумовуючи рішення шахти:

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

  2. Якщо так у кроці 1, спробуйте відновити його до конфігурації за замовчуванням.


1

Або просто потрібна бібліотека просто не знаходиться в репо. Я новачок в Python, і всі поради щодо оновлення Pip нарешті виявляються як оманливі. Мені довелося просто заглянути в https://pypi.org/ , виявивши, що бібліотека (повітряний потік у моєму випадку) зупинилася на якійсь старій версії, після чого її перейменовано. Так, теж можливе безглузде рішення :-).


1

Для всіх python3та pip3користувачів там:

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

а потім припустимо, що ви хочете встановити панди

pip3 install pandas --user

1

Відповіді про встановлення 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.