Moduł SSL w Pythonie nie jest dostępny (w OSX)

21

Mam problem z uruchomieniem pip installw virtualenv na OSX 10.13. Już mam bieg brew install openssli ścieżka /usr/local/include/opensslwskazuje ../opt/openssl/include/openssl. Czy ktoś wie, jak to naprawić? To zaczęło się dziać po ponownej instalacji pythonza pomocą brew install.

pip jest skonfigurowany z lokalizacjami, które wymagają TLS / SSL, jednak moduł ssl w Pythonie nie jest dostępny. Zbieranie poduszki Nie można pobrać adresu URL https://pypi.python.org/simple/pillow/ : Wystąpił problem z potwierdzeniem certyfikatu ssl: Nie można połączyć się z adresem URL HTTPS, ponieważ moduł SSL jest niedostępny. - pomijanie Nie można znaleźć wersji spełniającej wymaganie Poduszka (z wersji:) Nie znaleziono pasującej dystrybucji dla Poduszki

AKTUALIZACJA: Oto kilka dodatkowych informacji:

 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

Tak, mam zainstalowane zarówno wersje 3.6.5_1, jak i 3.7.4_1, ponieważ czasami muszę przełączać się między nimi.

 brew unlink openssl
Unlinking /usr/local/Cellar/openssl/1.0.2s... 0 symlinks removed
John M.
źródło
Zacznij od przedstawiający wyjście which python, which pip, python --version, pip --version. Potem, kiedy ostatnio sprawdzałem, opensslbyło tylko beczki, więc /usr/local/include/opensslnie powinienem być obecny, uciekaj brew unlink openssl.
ivan_pozdeev
@ivan_pozdeev Oczywiście, dodałem dane wyjściowe. Już próbowałem brew unlink.
John M.,

Odpowiedzi:

53

sslModułów, a także jego podstawowe pojawia rozszerzeń C jako część pythonwzoru:

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'>

więc jego brak najprawdopodobniej oznacza uszkodzenie instalacji pakietu, które brew reinstall pythonpowinno zostać naprawione.


Zauważ również, że chociaż Homebrew pozwala na współistnienie wielu wersji, jego logika instalacyjna nie jest do końca zaprojektowana, aby utrzymywać alternatywne wersje w działaniu, chyba że są one instalowane za pomocą formuł wersjonowanych (i np. Rutynowo usuwa stare wersje w zwykły sposób brew cleanup).

Rozważ więc użycie pyenv(dostępnego również przez brew), jeśli chcesz rutynowo przełączać się między wersjami Pythona - lub jakiegoś stuknięcia innej firmy, które oferuje formułowane wersje.

ivan_pozdeev
źródło
8
Dzięki! brew reinstallnaprawia to rzeczywiście.
John M.,
11

Mac OSX Catalina (i ten sam problem na OSX Mojave) Pyenv

Dla każdego, kto szuka tego tematu, miałem ten sam problem z prezentacją, ale miałem Python zainstalowany zarówno przez Homebrew, jak i Pyenv !! Byłoby lepiej (IMO) po prostu używać Pyenv do łatwego zarządzania wersjami. Jak wspomniano w odpowiedzi @ivan_pozdeev, ale oto kilka szczegółów, które możesz chcieć.

Jeśli twoja sytuacja jest podobna, żadne z powyższych rozwiązań nie wystarczyłoby, aby wszystko naprawić. Częściowo pomogła mi odpowiedź związana z Pyenvem tutaj: https://stackoverflow.com/a/51797298/3084820 Zdarzyło mi się również, że pyenv-virtualenvzainstalowałem, więc wspominając o tym, ponieważ często używa się tych dwóch razem.

W końcu podjąłem następujące kroki, aby rozwiązać problem:

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

Teraz, aby uzyskać czystą instalację zarządzalną za pomocą Pyenv:

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

To dało mi czystą, działającą instalację Pythona 3.6.10, a jeśli chciałbym lub potrzebowałem, mogłem zainstalować inną wersję i przełączać się między Pyenvem.

Matt Morgan
źródło
Myślę, że jestem w tej samej sytuacji. Czy to konieczne, brew uninstall pythonjeśli tylko używasz pyenv? Czy to gdzieś powoduje konflikt? Również próbowałem brew uninstall pythoni rzucił mi komunikat o błędzie „Błąd: Odmowa odinstalowania /usr/local/Cellar/python/3.7.7, ponieważ jest to wymagane przez [kilka innych pakietów]”. Sugestia jest prawdopodobnie bezpieczna brew uninstall --ignore-dependencies python, ale mimo to waham się. Nie pamiętam, jak użyłem tej wersji Pythona, a jeśli w jakiś sposób nadal jej używam.
Antoine
@Antoine, myślę, że udało mi się to naprawić w pyenv bez ponownej instalacji Pythona za pomocą naparu. Zrobiłem jednak ponownie zainstalować konkretną wersję Pythona za pomocą pyenv: pyenv uninstall 3.6.6 pyenv install 3.6.6 pyenv global 3.6.6
wronk
@wronk dzięki za Twój wkład! Wydaje się (ale nie jestem do końca pewien), że problem, który jakoś zniknął, działając, brew uninstall python mimo że zwrócił błąd, że nie odinstaluje Pythona. Może i tak polecenie wykonało wstępne czyszczenie, zanim zdecydowało, że nie będzie odinstalowywać Pythona? A może zrobiłem coś jeszcze. W każdym razie nadal mam inny problem z inną wersją Pythona i myślę, że przeinstaluję tę wersję, jak sugerujesz.
Antoine
2

Miałem podobny problem z Cataliną i nie mogłem ponownie zainstalować Homebrew do pracy. Próbowałem kilku rzeczy.

brew reinstall openssl
brew reinstall pyenv
brew reinstall pyenv-virtualenv

Ostatecznie jedyną rzeczą, która działała dla mnie, było całkowite odinstalowanie zarówno podstawowych instalacji Pythona, a następnie ponowna instalacja wszystkiego.

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
źródło
czy brew uninstall pyenv pyenv-virtualenvnie usunąć wszystkich środowisk wirtualnych, jak sugerowano przez twoją pyenv uninstall 3.x.x?
Antoine
0

Mam ten sam problem, ale ponowna instalacja nie działała dla mnie.

⇒ który python3
/ usr / local / bin / python3 blamb @ cha-109164-l: / usr / local / bin | master⚡

⇒ który pip3 / usr / local / bin / pip3 blamb @ cha-109164-l: / usr / local / bin | master⚡

⇒ pip3 -V pip 19.3.1 z /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

Bennie Lamb
źródło
2
Witamy w przepełnieniu stosu! Możesz edytować swoją odpowiedź, aby sformatować kod. Na przykład 4 spacje przed linią kodu oznaczą go jako kod. Możesz przeczytać pomoc dotyczącą formatowania, aby lepiej zrozumieć, jak prawidłowo oznaczyć pytania i odpowiedzi. Będziesz miał z nimi większą szansę, jeśli są dobrze sformatowane.
rvbarreto
0

Miałem ten sam błąd, a to dlatego, że korzystałem z Pythona 3.6.5 w moim środowisku pyenv. Poniższe leczenie działało dla mnie.

pyenv install 3.7.3
pyenv global 3.7.3
Yasunari Nishi
źródło
0

Miałem również ten błąd i naprawiłem go brew update && brew upgrade

baskcat
źródło
0

Moją poprawką jest ponowna instalacja pyenv i python

 brew uninstall pyenv pyenv-virtualenv
 brew install pyenv pyenv-virtualenv
 pyenv uninstall 3.6.5
 pyenv install 3.6.5
tzatalin
źródło