«Модуль ssl в Python недоступен» при установке пакета с помощью pip3

123

Я успешно установил Python 3.4 и Python 3.6 на свой локальный компьютер, но не могу устанавливать пакеты с расширением pip3.

Когда я выполняю pip3 install <package>, я получаю следующую ошибку, связанную с SSL :

pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.
Collecting <package>
  Could not fetch URL https://pypi.python.org/simple/<package>/: There was a problem confirming the ssl certificate: Can't connect to HTTPS URL because the SSL module is not available. - skipping
  Could not find a version that satisfies the requirement <package> (from versions: )
No matching distribution found for <package>

Как я могу исправить мою установку Python3.x, чтобы я мог устанавливать пакеты с помощью pip install <package>?

Харукадзе
источник
4
Вы явно установили pip3 на свой ubuntu с помощью команды sudo apt-get install python3-pip??
Сидахмед
2
Пожалуйста, попробуйте pip3 install --upgrade pipи посмотрите, получите ли вы то же сообщение или нет.
herry

Ответы:

93

Пошаговое руководство по установке Python 3.6 и pip3 в Ubuntu

  1. Установите необходимые пакеты для Python и ssl: $ sudo apt-get install libreadline-gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev

  2. Загрузите и распакуйте «Python-3.6.8.tar.xz» с https://www.python.org/ftp/python/ в свой домашний каталог.

  3. Откройте терминал в этом каталоге и запустите: $ ./configure

  4. Сборка и установка: $ sudo make && sudo make install

  5. Установите пакеты с помощью: $ pip3 install package_name

Аршо
источник
4
Работал на "Raspbian GNU / Linux 9 (стретч)"
Октай
2
Спасибо! Я ходил по кругу, заставляя python3 работать с Ubuntu 14.04, пока не нашел этот список команд.
jerrylogansquare
2
Мой спаситель Ubuntu.
markroxor
6
Это сработало для меня. Большое спасибо. Одна вещь, которую я не мог осмыслить, - почему бы не начать с шага 4 и только один раз сделать "make; make install"?
Paraphiliac Ostrich
1
Работал в Ubuntu Beaver. Я использовал python3.7 и pip 19, всегда с проблемой SSL .....
eduardosufan
62

Если вы используете Red Hat / CentOS:

# To allow for building python ssl libs
yum install openssl-devel
# Download the source of *any* python version
cd /usr/src
wget https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tar.xz
tar xf Python-3.6.2.tar.xz 
cd Python-3.6.2

# Configure the build w/ your installed libraries
./configure

# Install into /usr/local/bin/python3.6, don't overwrite global python bin
make altinstall
Аэлфинн
источник
работал и для python 2.7. просто добавьте make и сделайте altinstall
Jabda
Если вам нужен virtualenv, вам нужно запустить sudo /usr/local/bin/pip3.7 install virtualenv. Спасибо за такой ответ!
технократ
отлично, у меня возникли проблемы с установкой python 2.7.13 для устаревшего образа докера, и мне нужно openssl-develбыло его запуститьpython2.7 get-pip.py
Фелипе
59

Если вы работаете в Windows и используете anaconda, это сработало для меня:

Я пробовал много других решений, которые не работали (изменения переменной PATH среды ...)

Проблема может быть вызвана тем, что библиотеки DLL в папке Windows \ System32 (например, libcrypto-1_1-x64.dll или libssl-1_1-x64.dll или другие) размещены там другим программным обеспечением.

Исправление заключалось в установке openSSL с https://slproweb.com/products/Win32OpenSSL.html, который заменяет библиотеки DLL более поздними версиями.

Джуэрджи
источник
2
Я его только что установил. В списке программ, установленных в моей системе, у меня есть три версии OpenSSL (две 64-битные версии и одна 32-битная версия, хотя я использую 64-битную систему). Я не знаю, что все они установлены, поэтому оставил их там.
juergi
1
Это было самое простое решение, которое я нашел после долгих поисков. Пип не работал из-за ошибки OpenSSL. Spyder также вылетал при запуске из-за ошибки «невозможно импортировать имя HTTPSHandler из urllib.request». Для меня это было изолировано от Windows 10 Python 3. Комментарии, которые, как мы надеемся, помогут связать решение для людей, которые ищут в Google, большинство лучших результатов были старыми и сложными решениями.
Дик МакМанус
8
Если вы работаете в Windows и используете Anaconda, просто используйте Anaconda Prompt вместо cmd для запуска «pip install». Никаких дополнительных изменений DLL / SSL не потребуется.
FatihAkici
1
@FatihAkici - Большое спасибо. Мне это помогло.
Raju Penumatsa
2
Я собирался сломать свой компьютер, использовал pycharm на многих машинах и ОС, но на этом новом Windows я установил anaconda, и, похоже, он сломал pip. Я просматривал примерно 2 часа, большое спасибо, дружище. <3
Бенуа Ф
37

У меня была аналогичная проблема с OSX 10.11 из-за установки memcached, который установил python 3.7 поверх 3.6.

ВНИМАНИЕ: pip настроен с местоположениями, требующими TLS / SSL, однако модуль ssl в Python недоступен.

Потратил часы на отключение openssl, переустановку, изменение путей .. и ничего не помогло. Смена версии openssl на более старую сработала:

brew switch openssl 1.0.2e

Я нигде в Интернете не видел этого предложения. Надеюсь, это кому-то поможет.

dsomnus
источник
3
У меня была такая же проблема с MacOS Catalina 10.5.4 (бета), теперь она работает. Спасибо!
Питер Роземанн
14
Для меня это было brew switch openssl 1.0.2s. Но это было все. Ты спас меня, спасибо!
Антонио
3
Пытаюсь это сделать, но мне постоянно говорят, что openssl не имеет версии "1.0.2e" в Подвале. openssl не имеет версии "1.0.2s" в Подвале.
Джеймс Паркер
Антонио, Джеймс: какая у вас старая версия. В моем погребе была версия 1.0.2e, поэтому я использовал это. Я рад, что это помогло.
dsomnus
4
Спасибо вам большое! Для меня ваше решение перехода на старую версию opensslсработало: brew switch openssl 1.0.2t я использую Mac OS Catalina 10.15.3. Надеюсь, поможет.
viraj.kulkarni
25

Согласен с ответом mastaBlasta. Работал у меня. Я столкнулся с той же проблемой, что и в описании темы.

Среда: MacOS Sierra. И я использую Homebrew.

Мое решение:

  1. Переустановите openssl с помощью brew uninstall openssl; brew install openssl
  2. Согласно подсказкам Homebrew, сделайте следующее:

    echo 'export PATH="/usr/local/opt/openssl/bin:$PATH"' >> ~/.bash_profile
    export LDFLAGS="-L/usr/local/opt/openssl/lib"
    export CPPFLAGS="-I/usr/local/opt/openssl/include"
Натанью
источник
3
Спасибо, хитрость есть brew uninstall openssl, brew install openssl. Я попробовал, brew reinstall opensslно безрезультатно. Но удаление / установка работает!
Джефф Тиан
6
пришлось бежатьbrew uninstall --ignore-dependencies openssl
elad silver
16

В Ubuntu это может помочь:

cd Python-3.6.2
./configure --with-ssl
make
sudo make install
Tingtinghuang
источник
4
Почему для этого нам действительно нужно собирать Python из исходников? разве нет решения, которое работает со стандартными дистрибутивами Python? Я бы наивно надеялся, что добавление этого модуля будет возможно без переопределения двоичного файла python, для которого мы не всегда можем легко узнать соответствующее исходное местоположение в живой системе, которая не была недавно установлена.
Matanster
Пробовал, ничего не менял
usernumber
10
Я получаю предупреждение о том, что эта опция не распознается
ma3oun
Мне пришлось добавить несколько sudo к этим командам, но они работали там, где другие ответы не дали результата!
Пако Абато
6

Понижение версии openssl сработало для меня,

brew switch openssl 1.0.2s
Нишант Навархеде
источник
5

Вероятно, проблема вызвана отсутствием библиотеки.

Перед установкой python 3.6 убедитесь, что вы установили все библиотеки, необходимые для python.

$ sudo apt-get install build-essential checkinstall 
$ sudo apt-get install libreadline-gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev

Дополнительная информация в разделе Как установить Python 3.6.0 на Ubuntu и LinuxMint.

PengShaw
источник
5

Если вы используете OSX и скомпилировали Python из исходного кода:

Установите openssl с помощью brew brew install openssl

Обязательно следуйте инструкциям по настройке CPPFLAGSи LDFLAGS. В моем случае я использую openssl@1.1формулу пивоварения, и мне нужны эти 3 настройки для процесса сборки python, чтобы правильно ссылаться на мою библиотеку SSL:

export LDFLAGS="-L/usr/local/opt/openssl@1.1/lib"
export CPPFLAGS="-I/usr/local/opt/openssl@1.1/include"
export PKG_CONFIG_PATH="/usr/local/opt/openssl@1.1/lib/pkgconfig"

Предполагая, что библиотека установлена ​​в этом месте.

маста
источник
все та же проблема
Gaurav Paliwal
Попробуйте переустановить pip
mastaBlasta
@GauravPaliwal, @mastaBlasta: Для меня переход на старую версию opensslсработал: brew switch openssl 1.0.2t я использую Mac OS Catalina 10.15.3. Надеюсь, поможет.
viraj.kulkarni
5

Я столкнулся с той же проблемой в Windows 10. Моя очень специфическая проблема связана с моей установкой Anaconda. Я установил Anaconda, и по пути Path/to/Anaconda3/появляется файл python.exe. Таким образом, я вообще не устанавливал python, потому что Anaconda включает python. При использовании pip для установки пакетов я обнаружил тот же отчет об ошибке pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available..

Решение было следующее:

1) вы можете повторно скачать python на официальном сайте ;

2) Перейдите в каталог, в котором "Python 3.7 (64-bit).lnk"находится

3) import sslиexit()

4) введите cmd, "Python 3.7 (64-bit).lnk" -m pip install tensorflow например, .

Здесь все готово.

Яньци Хуан
источник
Не решение, но определенно выполняет свою работу. По крайней мере, помогает установить недостающие deps. Что я понял на своем локальном компьютере, так это то, что у меня были конфликтующие записи в моей переменной PATH для python (например, Anaconda 2.7 64-bit и Python 3.7 32-bit)
AP.
Также, чтобы улучшить этот ответ, вы можете сохранить абсолютный путь в переменной и запустить его как: cmd /c $py .\main.py( Powershell ) или cmd /c %py% .\main.py( Dos ). Это запустит его в вашей существующей оболочке и может быть написано сценарием
AP.
5

Если вы работаете в Windows и используете Anaconda, вы можете попробовать запустить команду «pip install ...» в Anaconda Prompt вместо cmd.exe, как предлагает здесь пользователь willliu1995 . Для меня это было самое быстрое решение, не требующее установки дополнительных компонентов.

Бабочка
источник
4

Я попытался МНОГО способов решить эту проблему, но ни один не решил. Сейчас я использую Windows 10.

Единственное, что сработало:

  • Удалить Anaconda
  • Удалите Python (я использовал версию 3.7.3)
  • Установите Python еще раз (не забудьте отметить опцию автоматического добавления в PATH)

Затем я загрузил все необходимые библиотеки с помощью PIP ... и работал!

Не знаю, почему и была ли проблема каким-то образом связана с Анакондой.

Жоао Игнасио
источник
3

для пользователей osx brew

Моя проблема возникла, связанная с моей установкой Python, и была быстро решена путем повторной установки python3 и pip. я думаю, что он начал плохо себя вести после обновления ОС, но кто знает (в настоящее время я использую Mac OS 10.14.6)

brew reinstall python3 --force
# setup pip
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python3 get-pip.py
# installa pkg successfully 
pip install pandas
lfender6445
источник
Спасибо за этот ответ! В моем случае проблемы начались после обновления до Catalina (10.15.3), и я обнаружил, что вашего первого шага brew reinstall python3 --forceбыло достаточно: pipпосле этого снова заработал , мне не нужно было переустанавливать pip.
PLL
3

Вы можете сделать одно из этих двух:

  1. При установке Anaconda выберите параметр, чтобы добавить Anaconda в путь .

или

  1. Найдите эти (полные) пути в папке установки Anaconda и добавьте их в переменную среды :

\ Анаконда

\ Анаконда \ Библиотека \ mingw-w64 \ bin

\ Анаконда \ Библиотека \ usr \ bin

\ Anaconda \ Library \ bin

\ Анаконда \ Скрипты

\ anaconda \ Библиотека

\ anaconda \ condabin

Добавьте указанные выше пути в системную переменную "Path", и ошибка больше не должна отображаться :)

aymusbond
источник
1
Одна из альтернатив - использовать специальную «подсказку анаконды», в которой эти переменные среды настроены правильно.
Туула,
2

У меня была такая же проблема, и я смог ее решить, выполнив следующие действия:

sudo yum install -y libffi-devel
sudo yum install openssl-devel
cd /usr/src
sudo wget https://www.python.org/ftp/python/3.7.1/Python-3.7.1.tar.xz
sudo tar xf Python-3.7.1.tar.xz
cd Python-3.7.1
sudo ./configure --enable-optimizations
# Install into /usr/local/bin/python3.7, don't overwrite global python bin
sudo make altinstall

в зависимости от химической завивки вам может не понадобиться sudo.

Results:
Collecting setuptools
Collecting pip
Installing collected packages: setuptools, pip
Successfully installed pip-10.0.1 setuptools-39.0.1

теперь должен быть в состоянии запустить

python3.7 -V 

и

pip3.7 -V

При установке пакетов:

pip3.7 install pandas

или, в зависимости от perms, вы также можете добавить флаг --user следующим образом:

pip3.7 install pandas --user
РубенД
источник
2

sslМодуль является TLS / SSL обертка для доступа к операции Sytem (OS) гнездо ( Lib / ssl.py ). Поэтому, когда sslмодуль недоступен, есть вероятность, что у вас либо не установлены библиотеки OpenSSL ОС, либо эти библиотеки не были найдены при установке Python. Предположим, что это более поздний случай (он же: у вас уже установлен OpenSSL, но они неправильно связаны при установке Python).

Я также предполагаю, что вы устанавливаете из исходников. Если вы производите установку из двоичного файла (например, из файла Window .exe) или пакета (Mac .dmg или Ubuntu apt), вы мало что можете сделать с процессом установки.

На этапе настройки вашей установки python вам необходимо указать, где OS OpenSSL будет использоваться для связывания:

# python 3.8 beta
./configure --with-openssl="your_OpenSSL root"

Итак, где вы найдете установленный каталог OpenSSL?

# ubuntu 
locate ssl.h | grep '/openssl/ssl.h'

/home/user/.linuxbrew/Cellar/openssl/1.0.2r/include/openssl/ssl.h
/home/user/envs/py37/include/openssl/ssl.h
/home/user/miniconda3/envs/py38b3/include/openssl/ssl.h
/home/user/miniconda3/include/openssl/ssl.h
/home/user/miniconda3/pkgs/openssl-1.0.2s-h7b6447c_0/include/openssl/ssl.h
/home/user/miniconda3/pkgs/openssl-1.1.1b-h7b6447c_1/include/openssl/ssl.h
/home/user/miniconda3/pkgs/openssl-1.1.1c-h7b6447c_1/include/openssl/ssl.h
/usr/include/openssl/ssl.h

Ваша система может отличаться от моей, но, как вы видите, у меня установлено много разных библиотек openssl. На момент написания этой статьи python 3.8 ожидает openssl 1.0.2 или 1.1:

Python требует наличия библиотеки libssl, совместимой с OpenSSL 1.0.2 или 1.1 с X509_VERIFY_PARAM_set1_host ().

Поэтому вам нужно будет проверить, какие из этих установленных библиотек вы можете использовать для компоновки, например

/usr/bin/openssl version

OpenSSL 1.0.2g  1 Mar 2016
./configure --with-openssl="/usr"
make && make install

Возможно, вам придется попробовать несколько или установить новую, чтобы найти библиотеку, которая подойдет для вашего Python и вашей ОС.

бизи
источник
1

В моем случае с Mac я удалил /Applications/Python 3.7. потому что у меня уже был Python3.7 отbrew install python3 .

Но это было триггером сообщения

pip настроен с местоположениями, требующими TLS / SSL, однако модуль ssl в Python недоступен.

Что я сделал в своей ситуации

  1. Я снова загрузил 64-битный установщик macOS и установил.
  2. Дважды щелкните /Applications/Python3.6/Install Certificates.commandи /Applications/Python3.6/Update Shell Profile.command.
  3. Перезагрузите Mac
  4. И я не уверен, но, возможно, способствовал успеху pip.conf. См. Pip install fails .
Арайа
источник
1

Я наконец решил эту проблему. Это детали моего env:
Версия Python для установки: 3.6.8
ОС: Ubuntu 16.04.6 LTS
Корневой доступ: Нет

Некоторые люди предлагают установить libssl-dev, но у меня это не сработало. Я перехожу по этой ссылке и исправил!
Короче говоря, я загружаю, распаковываю, собираю и устанавливаю OpenSSL (openssl-1.1.1b.tar.gz). Затем я изменяю .bashrcфайл по этой ссылке .
Затем я загружаю и извлекаю Python-3.6.8.tgz. Я редактирую Modules / Setup.dist, чтобы изменить путь SSL (строки вокруг # 211). Я сделал ./configure --prefix=$HOME/opt/python-3.6.8, makeи make install. Наконец, я изменяю свой .bashrc. Обратите внимание, что я не включаю --enable-optimizationsв ./configure.

Донто
источник
0

В macos настройте python 3.8.1 с помощью приведенной ниже команды, чтобы решить проблему, я думаю, что она также будет работать в Linux.

./configure --enable-optimizations --with-openssl=/usr/local/opt/openssl@1.1/

измените параметр dir в зависимости от вашей системы.

user3857893
источник
0

Если вы используете OSX и другие решения не помогли вам (как и я).

Вы можете попробовать удалить python3 и обновить pip3

brew uninstall --ignore-dependencies python3
pip3 install --upgrade pip   

Это сработало для меня;)

Инищит
источник
0

(НЕ в Windows!)

Это заставило меня рвать волосы на неделю, так что я надеюсь, что это кому-то поможет

Я пробовал все, кроме переустановки Anaconda и / или Jupyter.

Настроить

  • AWS Linux
  • Установленная вручную Anaconda 3-5.3.0
  • Python3 (3.7) работал внутри анаконды (т.е. ./anaconda3/bin/python)
  • также были /usr/bin/pythonи /usr/bin/python3(но они не использовались, поскольку большая часть работы выполнялась в терминале Jupyter)

Fix

В терминале Jupyter:

cp /usr/lib64/libssl.so.10 ./anaconda3/lib/libssl.so.1.0.0

cp /usr/lib64/libcrypto.so.10 ./anaconda3/lib/libcrypto.so.1.0.0

Что спровоцировало это?

Итак, все это работало, пока я не попробовал conda install conda-forge

Я не уверен, что случилось, но conda должно быть обновилась openssl на коробке (я предполагаю), поэтому после этого все сломалось.

В принципе, мне неизвестно, conda обновила openssl, но каким-то образом удалила старые библиотеки и заменила их на libssl.so.1.1иlibcrypto.so.1.1 .

Python3, я полагаю, был скомпилирован для поиска libssl.so.1.0.0

В конце концов ключ к диагностике заключался в следующем:

python -c "import ssl; print (ssl.OPENSSL_VERSION)"

дал ключ library "libssl.so.1.0.0" not found

Я сделал огромное предположение, что yumверсия ssl такая же, как и версияconda версия, поэтому простое переименование общего объекта может сработать, и это сработало.

Другим моим решением было перекомпилировать python, переустановить анаконду и т. Д., Но, в конце концов, я рад, что мне это не понадобилось.

Надеюсь, это поможет вам, ребята.

Снежный Оз
источник
0

В случае использования pyenvдля управления установками python в Mac OS Catalina мне пришлось opensslсначала установить с помощью brew, а затем после этого запуска, pyenv install 3.7.8который, казалось, собирал установку python с использованием opensslfrom homebrew (это даже было сказано как таковое в выводе установки). Тогда pyenv global 3.7.8и меня не было.

Правильныйбританский
источник
0

Я смог исправить это, обновив версию python в этом файле. pyenv: версия 3.6.5 не установлена ​​(устанавливается /Users/taruntarun/.python-version) Хотя у меня была установлена ​​последняя версия, моя команда все еще использовала старую версию 3.6.5

Переход на версию 3.7.3

Тарун Сингх
источник
-1

У меня была такая же проблема последние два дня, и я решил ее только сейчас.

Я пытался использовать --trust-hostопцию, DigiCert_High_Assurance_EV_Root_CA.pemно не сработало, я не смог установить модуль ssl (он говорит, что он не может быть установлен для версий python выше 2.6), установка $PIP_CERTпеременной тоже не исправила его, и я установил libssl1.0.2и libssl1.0.0установил. Также стоит упомянуть, что у меня не было ~/.pip/pip.confфайла, и его создание тоже не устранило ошибку.

Что, наконец, решило это, так это установка python3.6 makeснова с. Скачать Python-3.6.0.tgz с веб - сайта, запустить configureзатем make, make testи make install. Надеюсь, это сработает для вас.

EC Lobo
источник
2
Извините, но мне пришлось проголосовать против из-за простого повторения тех же действий, которые вызвали эту ошибку. Я не знаю, как вы ожидаете запускать одни и те же команды в одном источнике Python и получать разные результаты!
Джейми Линдси
-1

Документация python на самом деле очень ясна, и следование инструкциям выполнило работу, тогда как другие ответы, которые я нашел здесь, не исправляли эту проблему.

  1. сначала установите python 3.xx из исходного кода, используя, например, версию 3.6.2 https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tar.xz

  2. убедитесь, что у вас установлен openssl, запустив brew install openssl

  3. разархивируйте его и перейдите в каталог python: tar xvzf Python-3.6.2.tar.xz && cd Python-3.6.2

  4. тогда, если версия python <3.7, запустите

CPPFLAGS="-I$(brew --prefix openssl)/include" \ LDFLAGS="-L$(brew --prefix openssl)/lib" \ ./configure --with-pydebug 5. Наконец, запустите make -s -j2( -sэтот флаг -j2говорит вашей машине, что нужно использовать 2 задания)

pglaser
источник
j - это мнемоника для «заданий», которая представляет собой количество процессов, запущенных при параллельном запуске сборки. Что касается флага s, он по-прежнему выводит предупреждения, но без дополнительного шума уровней информации / отладки. Эти флаги используются в инструкциях документации python.
pglaser
-1

У меня была такая же проблема при установке python3.7 на машину ubuntu14.04. Проблема заключалась в том, что у меня было несколько пользовательских папок в моем PKG_CONFIG_PATH и в моем LD_LIBRARY_PATH, что не позволяло процессу сборки python находить системные библиотеки openssl.

поэтому попробуйте очистить их и посмотреть, что произойдет:

export PKG_CONFIG_PATH=""
export LD_LIBRARY_PATH=""
Локи
источник
2
Это действительно испортило бы чей-то день, если бы у них был полезный материал в этих переменных среды
Матанстер
-1

Хорошо, последний ответ на этот вопрос, на данный момент не используйте Python 3.8 , используйте только 3.7 или меньше, потому что большинство библиотек не удается установить с указанной выше ошибкой

Ujju
источник
Насколько мне известно, python использует базовые пакеты операционной системы. Такие вещи, как gcc, opensslи zlib. Поэтому важно установить эти предварительные условия перед компиляцией python, особенно при использовании в Linux.
Стивен
@ surfer190 Я использую окна, но то, что вы сказали, может быть правдой для обоих, я думаю
Уджжу