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


21

У мене виникають проблеми із запуском 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 недоступний. - пропуск Не вдалося знайти версію, яка б відповідала вимозі Подушка (від версій:) Не знайдено відповідного розподілу для Подушки

ОНОВЛЕННЯ: Ось додаткова інформація:

 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.
Джон М.

Відповіді:


53

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 - або деяким стороннім краном, який пропонує версії формул для нього.


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 дякую за ваш внесок! Здається (але я не зовсім впевнений), що проблема, якою я якось зникла, запустившись, brew uninstall 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

це 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


0

Моє виправлення - перевстановити pyenv та python

 brew uninstall pyenv pyenv-virtualenv
 brew install pyenv pyenv-virtualenv
 pyenv uninstall 3.6.5
 pyenv install 3.6.5
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.