Le module SSL en Python n'est pas disponible (sous OSX)

22

J'ai du mal à exécuter pip installdans un virtualenv sur OSX 10.13. J'ai déjà couru brew install opensslet le chemin /usr/local/include/opensslpointe vers ../opt/openssl/include/openssl. Est-ce que quelqu'un sait comment réparer ceci? Cela a commencé à se produire après avoir réinstallé à l' pythonaide de brew install.

pip est configuré avec des emplacements qui nécessitent TLS / SSL, cependant le module ssl en Python n'est pas disponible. La collecte de l'oreiller n'a pas pu récupérer l'URL https://pypi.python.org/simple/pillow/ : un problème est survenu lors de la confirmation du certificat SSL: impossible de se connecter à l'URL HTTPS car le module SSL n'est pas disponible. - ignorer Impossible de trouver une version qui satisfait à l'exigence Oreiller (à partir des versions:) Aucune distribution correspondante trouvée pour Oreiller

MISE À JOUR: Voici quelques informations supplémentaires:

 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

Oui, les versions 3.6.5_1 et 3.7.4_1 sont installées car je devrai parfois basculer entre les deux.

 brew unlink openssl
Unlinking /usr/local/Cellar/openssl/1.0.2s... 0 symlinks removed
John M.
la source
Commencez par montrer la sortie which python, which pip, python --version, pip --version. Puis, la dernière fois que j'ai vérifié, opensslil n'y avait que des fûts, donc je ne /usr/local/include/openssldevrais pas être présent, courir brew unlink openssl.
ivan_pozdeev
@ivan_pozdeev Bien sûr, j'ai ajouté la sortie. J'ai déjà essayé brew unlink.
John M.

Réponses:

54

Le sslmodule ainsi que son extension C sous-jacente semblent faire partie de la pythonformule:

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

donc le fait de le manquer signifie probablement une corruption d'installation du paquet qui brew reinstall pythondevrait être corrigée.


Notez également que même si Homebrew permet à plusieurs versions de coexister, sa logique d'installation n'est pas tout à fait conçue pour garder les versions alternatives opérationnelles à moins qu'elles ne soient installées via une formule versionnée (et par exemple, supprime régulièrement les anciennes versions de manière régulière brew cleanup).

Envisagez donc d'utiliser pyenv(également disponible via brew) si vous devez basculer régulièrement entre les versions de Python - ou un robinet tiers qui propose des formules versionnées pour cela.

ivan_pozdeev
la source
8
Merci! brew reinstallle corrige en effet.
John M.
11

Mac OSX Catalina (et même problème sur OSX Mojave) Pyenv

Pour tous ceux qui recherchent ce sujet, j'ai eu le même problème de présentation, mais Python avait été installé via Homebrew et Pyenv !! Il aurait été préférable (IMO) d'utiliser simplement Pyenv pour gérer facilement les versions. Comme mentionné par @ivan_pozdeev dans sa réponse, mais voici quelques détails que vous pourriez souhaiter.

Si votre situation est similaire, aucune des solutions ci-dessus ne suffirait à remettre les choses en ordre. En partie j'ai été aidé par une réponse liée ici Pyenv: https://stackoverflow.com/a/51797298/3084820 Je me trouvais aussi avoir pyenv-virtualenvinstallé, afin de mentionner que, ainsi, comme il est courant d'utiliser ces deux ensemble.

J'ai finalement pris les mesures suivantes pour résoudre le problème:

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

Maintenant, pour une installation propre gérable avec Pyenv:

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

Cela m'a donné une installation propre et fonctionnelle de Python 3.6.10, et si je le voulais ou si j'en avais besoin, je pouvais installer une version différente et basculer entre avec Pyenv.

Matt Morgan
la source
Je pense que je suis dans la même situation. Maintenant, est-il nécessaire brew uninstall pythonsi vous utilisez simplement pyenv? Ou cela crée-t-il un conflit quelque part? De plus, j'ai essayé brew uninstall pythonet cela m'a lancé le message d'erreur "Erreur: Refuser de désinstaller /usr/local/Cellar/python/3.7.7 car il est requis par [un tas d'autres packages]". Il est probablement sûr d'aller de l'avant avec la suggestion de brew uninstall --ignore-dependencies python, mais j'hésite néanmoins. Je ne me souviens pas comment j'ai utilisé cette version de python, et si je l'utilise toujours.
Antoine
@Antoine, je crois que j'ai pu résoudre ce problème dans pyenv sans réinstaller python avec brew. J'ai cependant réinstallé une version spécifique de python avec pyenv: pyenv uninstall 3.6.6 pyenv install 3.6.6 pyenv global 3.6.6
wronk
@wronk merci pour votre contribution! Il semble (mais je ne suis pas tout à fait sûr) que le problème que j'avais en quelque sorte disparu en s'exécutant brew uninstall python même s'il a provoqué l'erreur de ne pas désinstaller python. Peut-être que la commande a fait un nettoyage préliminaire de toute façon, avant de décider qu'elle n'irait pas de l'avant avec la désinstallation de python? Ou peut-être que j'ai fait autre chose. En tout cas, j'ai toujours un problème différent avec une autre version de python, et je pense que je vais réinstaller cette version comme vous le suggérez.
Antoine
2

J'ai eu un problème similaire avec Catalina et je n'ai pas pu faire réinstaller homebrew pour qu'il fonctionne. J'ai essayé plusieurs choses.

brew reinstall openssl
brew reinstall pyenv
brew reinstall pyenv-virtualenv

En fin de compte, la seule chose qui a fonctionné pour moi a été de désinstaller complètement les deux ainsi que les installations sous-jacentes de python, puis de tout réinstaller.

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
la source
ne brew uninstall pyenv pyenv-virtualenvsupprime PAS tous les environnements virtuels comme suggéré par votre pyenv uninstall 3.x.x?
Antoine
0

J'ai le même problème, mais la réinstallation n'a pas fonctionné pour moi.

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

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

⇒ pip3 -V pip 19.3.1 depuis /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
la source
2
Bienvenue sur stack overflow! Vous voudrez peut-être modifier votre réponse afin de formater votre code. Par exemple, 4 espaces avant votre ligne de code la marqueront comme un code. Vous voudrez peut-être lire l' aide au formatage pour mieux comprendre comment bien rédiger vos questions et réponses. Vous aurez plus de chance avec eux s'ils sont bien formatés.
rvbarreto
0

J'ai eu la même erreur et c'est parce que j'utilisais python 3.6.5 dans mon environnement pyenv. Le traitement ci-dessous a fonctionné pour moi.

pyenv install 3.7.3
pyenv global 3.7.3
Yasunari Nishi
la source
0

J'ai également eu cette erreur et je l'ai corrigée avec brew update && brew upgrade

baskcat
la source
0

Ma solution est de réinstaller pyenv et python

 brew uninstall pyenv pyenv-virtualenv
 brew install pyenv pyenv-virtualenv
 pyenv uninstall 3.6.5
 pyenv install 3.6.5
tzatalin
la source