Модуль SSL в Python недоступен (в OSX)

22

У меня проблемы с работой pip installв virtualenv на OSX 10.13. Я уже бежал, brew install opensslи путь /usr/local/include/opensslуказывает на ../opt/openssl/include/openssl. Кто-нибудь знает, как это исправить? Это начало происходить после того, как я переустановил pythonиспользование brew install.

В pip настроены места, для которых требуется TLS / SSL, однако модуль ssl в Python недоступен. Сбор подушек Не удалось получить URL-адрес https://pypi.python.org/simple/pillow/ : При подтверждении сертификата ssl возникла проблема: не удается подключиться к URL-адресу HTTPS, поскольку модуль SSL недоступен. - пропуск Не удалось найти версию, которая удовлетворяет требованию Pillow (из версий:) Не найдено подходящего дистрибутива для Pillow

ОБНОВЛЕНИЕ: Вот еще немного информации:

 which python
/usr/local/opt/python/libexec/bin/python
 which pip
/usr/local/opt/python/libexec/bin/pip
 python --version
Python 3.7.4
 pip --version
pip 19.1.1 from /usr/local/lib/python3.7/site-packages/pip (python 3.7)
 brew info python
python: stable 3.7.4 (bottled), HEAD
Interpreted, interactive, object-oriented programming language
https://www.python.org/
/usr/local/Cellar/python/3.6.5_1 (4,795 files, 100.0MB)
  Poured from bottle on 2019-10-08 at 14:39:37
/usr/local/Cellar/python/3.7.4_1 (3,903 files, 60.6MB) *
  Poured from bottle on 2019-10-08 at 14:37:10
From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/python.rb

Да, у меня установлены и 3.6.5_1, и 3.7.4_1, так как иногда мне может потребоваться переключаться между ними.

 brew unlink openssl
Unlinking /usr/local/Cellar/openssl/1.0.2s... 0 symlinks removed
Джон М.
источник
Начните с отображением вывода which python, which pip, python --version, pip --version. Затем, в прошлый раз, когда я проверял, opensslбыл только бочонок, поэтому /usr/local/include/opensslне должен присутствовать, беги brew unlink openssl.
ivan_pozdeev
@ivan_pozdeev Конечно, я добавил вывод. Я уже попробовал brew unlink.
Джон М.

Ответы:

54

sslМодуль, а также лежащие в его основе появляется расширение С , чтобы быть частью pythonформулы:

Mac-Admin:~ admin$ python3
Python 3.7.4 (default, Sep  7 2019, 18:27:02) 
[Clang 10.0.1 (clang-1001.0.46.4)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import ssl
>>> ssl
<module 'ssl' from '/usr/local/Cellar/python/3.7.4_1/Frameworks/Python.framework/Versions/3.7/lib/python3.7/ssl.py'>
>>> import _ssl
>>> _ssl
<module '_ssl' from '/usr/local/Cellar/python/3.7.4_1/Frameworks/Python.framework/Versions/3.7/lib/python3.7/lib-dynload/_ssl.cpython-37m-darwin.so'>

поэтому его отсутствие скорее всего означает повреждение установки пакета, которое brew reinstall pythonследует исправить.


Также обратите внимание, что хотя Homebrew позволяет сосуществовать нескольким версиям, его логика установки не совсем рассчитана на то, чтобы поддерживать альтернативные версии в рабочем состоянии, если они не установлены с помощью версионной формулы (и, например, регулярно удаляет старые версии в обычной brew cleanup).

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

ivan_pozdeev
источник
8
Спасибо! brew reinstallисправляет это действительно.
Джон М.
11

Mac OSX Catalina (и та же проблема с OSX Mojave) Pyenv

Для тех, кто ищет эту тему, у меня была та же самая проблема с представлением, но Python был установлен через Homebrew и Pyenv !! Было бы лучше (IMO) просто использовать Pyenv для простого управления версиями. Как упомянуто @ivan_pozdeev в их ответе, но вот некоторые детали, которые вы могли бы пожелать.

Если ваша ситуация похожа, ни одного из вышеперечисленных решений будет недостаточно, чтобы все исправить. Частично мне помог ответ, связанный с Pyenv здесь: https://stackoverflow.com/a/51797298/3084820 Я также случайно pyenv-virtualenvустановил, так что упомянул об этом, так как это обычное использование этих двух вместе.

Я наконец предпринял следующие шаги для решения проблемы:

brew uninstall python
rm -rf $(pyenv root)
brew uninstall pyenv-virtualenv   # you may not have this installed, but...
brew uninstall pyenv

Теперь для чистой установки, управляемой с помощью Pyenv:

brew install pyenv
pyenv install 3.6.10  (or whatever version you want)

Это дало мне чистую рабочую установку Python 3.6.10, и, если бы я захотел или нуждался в этом, я мог установить другую версию и переключаться между ними с помощью Pyenv.

Мэтт Морган
источник
Я думаю, что я в той же ситуации. Теперь, это необходимо, brew uninstall pythonесли вы просто используете pyenv? Или это создает конфликт где-то? Кроме того, я попытался, brew uninstall pythonи это выдало мне сообщение об ошибке «Ошибка: отказ от удаления /usr/local/Cellar/python/3.7.7, потому что это требуется [куча других пакетов]». Вероятно, можно с уверенностью идти вперед с предложением brew uninstall --ignore-dependencies python, но я все же колеблюсь. Я не могу вспомнить, как я использовал эту версию Python, и если так или иначе я все еще использую ее.
Антуан
@ Antoine, я думаю, что смог исправить это в pyenv без переустановки python с brew. Однако я переустановил конкретную версию Python с помощью pyenv: pyenv uninstall 3.6.6 pyenv install 3.6.6 pyenv global 3.6.6
wronk
@wronk спасибо за ваш вклад! Кажется (но я не совсем уверен), что проблема, которую я каким-то образом исчезла при запуске, brew uninstall python даже если он выдал ошибку, что он не удалит Python. Может быть, команда все же провела предварительную очистку, прежде чем решить, что не удастся удалить python? Или, может быть, я еще кое-что сделал. В любом случае, у меня все еще другая проблема с другой версией python, и я думаю, что переустановлю эту версию, как вы предлагаете.
Антуан
2

У меня была похожая проблема с Каталиной, и я не мог заставить переустановить доморощенный кофе работать. Я попробовал несколько вещей.

brew reinstall openssl
brew reinstall pyenv
brew reinstall pyenv-virtualenv

В конечном счете, единственное, что мне помогло, - это полностью удалить обе установки Python, а затем переустановить все.

brew uninstall pyenv pyenv-virtualenv
brew install pyenv pyenv-virtualenv
pyenv uninstall 3.x.x
pyenv install 3.x.x
pip install -r requirements.txt
charlton_austin
источник
это brew uninstall pyenv pyenv-virtualenvНЕ удалить все виртуальные среды , как это было предложено в соответствии с Вашими pyenv uninstall 3.x.x?
Антуан
0

У меня та же проблема, но переустановка не работает для меня.

⇒ какой python3
/ usr / local / bin / python3 blamb @ cha-109164-l: / usr / local / bin | master⚡

⇒ какой pip3 / usr / local / bin / pip3 blamb @ cha-109164-l: / usr / local / bin | master⚡

⇒ pip3 -V pip 19.3.1 из /usr/local/lib/python3.7/site-packages/pip (python 3.7) blamb @ cha-109164-l: / usr / local / bin | master⚡

⇒ python3 -V Python 3.7.0 blamb @ cha-109164-l: / usr / l

Бенни Лэмб
источник
2
Добро пожаловать в переполнение стека! Вы можете отредактировать свой ответ, чтобы отформатировать код. Например, 4 пробела перед строкой кода помечают его как код. Возможно, вы захотите прочитать справку по форматированию, чтобы лучше понять, как правильно пометить ваши вопросы и ответы. У вас будет больше шансов с ними, если они хорошо отформатированы.
rvbarreto
0

У меня была та же ошибка, и это было потому, что я использовал python 3.6.5 в моей среде pyenv. Приведенное ниже лечение помогло мне.

pyenv install 3.7.3
pyenv global 3.7.3
Ясунари Ниши
источник
0

У меня также была эта ошибка, и я исправил ее brew update && brew upgrade

baskcat
источник
0

Мое исправление - переустановить pyenv и python.

 brew uninstall pyenv pyenv-virtualenv
 brew install pyenv pyenv-virtualenv
 pyenv uninstall 3.6.5
 pyenv install 3.6.5
tzatalin
источник