El módulo SSL en Python no está disponible (en OSX)

22

Tengo problemas para ejecutar pip installvirtualenv en OSX 10.13. Ya he corrido brew install openssly el camino /usr/local/include/opensslseñala ../opt/openssl/include/openssl. ¿Alguien sabe cómo arreglar esto? Esto comenzó a suceder después de que reinstalé pythonusando brew install.

pip está configurado con ubicaciones que requieren TLS / SSL, sin embargo, el módulo ssl en Python no está disponible. Collecting Pillow no pudo recuperar la URL https://pypi.python.org/simple/pillow/ : Hubo un problema al confirmar el certificado SSL: no se puede conectar a la URL HTTPS porque el módulo SSL no está disponible. - omitiendo No se pudo encontrar una versión que satisfaga el requisito Pillow (de las versiones:) No se encontró una distribución coincidente para Pillow

ACTUALIZACIÓN: Aquí hay más información:

 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

Sí, tengo instalados 3.6.5_1 y 3.7.4_1, ya que es posible que deba cambiar entre los dos a veces.

 brew unlink openssl
Unlinking /usr/local/Cellar/openssl/1.0.2s... 0 symlinks removed
John M.
fuente
Comience con mostrar la salida de which python, which pip, python --version, pip --version. Entonces, la última vez que lo revisé, opensslera solo de barril, por lo /usr/local/include/opensslque no debería estar presente, correr brew unlink openssl.
ivan_pozdeev
@ivan_pozdeev Claro, he agregado la salida. Ya lo he intentado brew unlink.
John M.

Respuestas:

54

El sslmódulo, así como su extensión C subyacente, parece ser parte de la pythonfórmula:

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

por lo que falta probablemente significa corrupción de instalación del paquete que brew reinstall pythondebería solucionarse.


También tenga en cuenta que, si bien Homebrew permite que coexistan múltiples versiones, su lógica de instalación no está diseñada para mantener operativas las versiones alternativas a menos que se instalen mediante una fórmula versionada (y, por ejemplo, eliminan rutinariamente versiones antiguas de forma regular brew cleanup).

Por lo tanto, considere usar pyenv(también disponible a través de brew) si necesita cambiar rutinariamente entre versiones de Python, o algún toque de terceros que ofrece fórmulas versionadas para ello.

ivan_pozdeev
fuente
8
¡Gracias! brew reinstalllo arregla de hecho.
John M.
11

Mac OSX Catalina (y el mismo problema en OSX Mojave) Pyenv

¡Para cualquiera que buscara este tema, tenía el mismo problema de presentación, pero tenía Python instalado a través de Homebrew y Pyenv! Hubiera sido mejor (IMO) usar Pyenv para administrar fácilmente las versiones. Como mencionó @ivan_pozdeev en su respuesta, pero aquí hay algunos detalles que puede desear.

Si su situación es similar, ninguna de las soluciones anteriores sería suficiente para arreglar las cosas. Parcialmente me ayudó una respuesta relacionada con Pyenv aquí: https://stackoverflow.com/a/51797298/3084820 También me pyenv-virtualenvinstalé, por lo que mencioné eso también, ya que es común usar estos dos juntos.

Finalmente tomé los siguientes pasos para resolver el problema:

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

Ahora, para una instalación limpia manejable con Pyenv:

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

Esto me dio una instalación limpia y funcional de Python 3.6.10, y si quisiera o lo necesitara, podría instalar una versión diferente y cambiar entre Pyenv.

Matt Morgan
fuente
Creo que estoy en la misma situación. Ahora, ¿es necesario brew uninstall pythonsi solo está usando pyenv? ¿O esto crea un conflicto en alguna parte? Además, lo intenté brew uninstall pythony me arrojó el mensaje de error "Error: negarse a desinstalar /usr/local/Cellar/python/3.7.7 porque es requerido por [un montón de otros paquetes]". Probablemente sea seguro seguir adelante con la sugerencia de brew uninstall --ignore-dependencies python, pero no obstante dudo. No recuerdo cómo usé esta versión de Python, y si de alguna manera todavía la estoy usando.
Antoine
@Antoine, creo que pude arreglar esto en pyenv sin reinstalar python con brew. Sin embargo, reinstalé una versión específica de Python con pyenv: pyenv uninstall 3.6.6 pyenv install 3.6.6 pyenv global 3.6.6
wronk
@wronk gracias por tu aporte! Parece (pero no estoy completamente seguro) que el problema que había desaparecido de alguna manera al ejecutarse brew uninstall python a pesar de que arrojó el error de que no desinstalaría Python. ¿Tal vez el comando hizo una limpieza preliminar de todos modos, antes de decidir que no continuaría con la desinstalación de Python? O tal vez hay algo más que hice. En cualquier caso, todavía tengo un problema diferente con otra versión de python, y creo que volveré a instalar esa versión como sugieres.
Antoine
2

Tuve un problema similar con Catalina y no pude hacer que reinstalar homebrew funcione. Intenté varias cosas.

brew reinstall openssl
brew reinstall pyenv
brew reinstall pyenv-virtualenv

En última instancia, lo único que funcionó para mí fue desinstalar por completo tanto las instalaciones de Python subyacentes como luego reinstalar todo.

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
fuente
no brew uninstall pyenv pyenv-virtualenvse retiran todos los entornos virtuales como lo sugiere su pyenv uninstall 3.x.x?
Antoine
0

Tengo el mismo problema, pero la reinstalación no me ha funcionado.

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

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

⇒ pip3 -V pip 19.3.1 de /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
fuente
2
Bienvenido a desbordamiento de pila! Es posible que desee editar su respuesta para formatear su código. Por ejemplo, 4 espacios antes de su línea de código lo marcarán como un código. Es posible que desee leer la ayuda de formateo para comprender mejor cómo marcar correctamente sus preguntas y respuestas. Tendrá una mejor oportunidad con ellos si están bien formateados.
rvbarreto
0

Tuve el mismo error y fue porque estaba usando Python 3.6.5 en mi entorno pyenv. El siguiente tratamiento funcionó para mí.

pyenv install 3.7.3
pyenv global 3.7.3
Yasunari Nishi
fuente
0

También tuve este error y lo arreglé con brew update && brew upgrade

baskcat
fuente
0

Mi solución es reinstalar pyenv y python

 brew uninstall pyenv pyenv-virtualenv
 brew install pyenv pyenv-virtualenv
 pyenv uninstall 3.6.5
 pyenv install 3.6.5
tzatalin
fuente