Python se bloquea en MacOS 10.15 Beta (19A582a) con "/usr/lib/libcrypto.dylib"

47

Ejecuté mi proyecto Django con la nueva MacOS Catalina y estaba funcionando bien.
Instalé oh_my_zsh y luego traté de ejecutar el mismo proyecto que se está bloqueando con los siguientes errores. Desinstalé oh_my_zsh e intenté nuevamente pero no funcionó.

Path:                  /usr/local/Cellar/python/3.7.4_1/Frameworks/Python.framework/Versions/3.7/Resources/Python.app/Contents/MacOS/Python
Identifier:            Python
Version:               3.7.4 (3.7.4)
Code Type:             X86-64 (Native)
Parent Process:        Python [7526]
Responsible:           Terminal [7510]
User ID:               501

Date/Time:             2019-10-07 20:59:20.675 +0530
OS Version:            Mac OS X 10.15 (19A582a)
Report Version:        12
Anonymous UUID:        CB7F20F6-96C0-4F63-9EC5-AFF3E0989687


Time Awake Since Boot: 3000 seconds

System Integrity Protection: enabled

Crashed Thread:        0  Dispatch queue: com.apple.main-thread

Exception Type:        EXC_CRASH (SIGABRT)
Exception Codes:       0x0000000000000000, 0x0000000000000000
Exception Note:        EXC_CORPSE_NOTIFY

Application Specific Information:
/usr/lib/libcrypto.dylib
abort() called
Invalid dylib load. Clients should not load the unversioned libcrypto dylib as it does not have a stable ABI.
Faisal Manzer
fuente
Si estás en un virtualenv: Para mí trabajé un reinicio (completo) del venv (eliminándolo y recreándolo con todas las dependencias, etc.)
basti

Respuestas:

94

Me encontré con el mismo problema y me sentí un poco incómodo de vincular manualmente las cosas.

Pude resolver el problema simplemente

  1. Instalación de openssl a través de homebrew:
    brew install openssl
  2. Apuntando hacia las bibliotecas dinámicas desde openssl a través de DYLD_LIBRARY_PATH:
    export DYLD_LIBRARY_PATH=/usr/local/opt/openssl/lib:$DYLD_LIBRARY_PATH

Acabo de agregar esa línea a mi .zshrc.

Editar: de acuerdo con esta pregunta , el uso de DYLD_FALLBACK_LIBRARY_PATHpodría ser preferible aDYLD_LIBRARY_PATH .

Edición 2: Como se menciona en un comentario a continuación, esta probablemente debería ser la respuesta aceptada. Simplemente reinstale el cryptographypaquete.

bixel
fuente
19
voto positivo
Esto también funcionó para mí en la línea de comando, sin embargo, no funcionó para los scripts. ¿Podría faltar algo?
ErnestoE
2
Puede confirmar export DYLD_FALLBACK_LIBRARY_PATH=/usr/local/opt/openssl/libtrabajos como usted describió. ¡Gracias por el consejo!
Luke Hoersten el
1
Esto es genial para hacer que las cosas funcionen, pero no lo resuelve por completo. Tengo algunos trabajos de crontab que necesitan usar Python y no quiero asegurarme de que todos tengan esta configuración env. Me gusta la solución de @ Andrei a continuación. Configura enlaces simbólicos a cualesquiera que sean las últimas librerías openssl para que, cuando se actualice en el futuro, los enlaces también lo sean. stackoverflow.com/a/58596931/142318
Chris
1
Todos deberían probar la respuesta de @tonyStarks a continuación antes de esta, puede ser una desinstalación y reinstalación fácil para usted
Micheal C Wallas
38

Advertencia: no soy un experto en seguridad, ¡y esta solución se mete con las bibliotecas de cifrado!

No creo que tu problema se deba a zsh u oh-my-zsh. Mi mejor conjetura: algunas bibliotecas criptográficas instaladas con MacOS 10.15 son incompatibles con Homebrewpython3 instalación .

Esto es lo que solucionó el problema para mí.

# Install openssl via homebrew.
# Note: According to homebrew, "openssl is keg-only, which means it was
# not symlinked into /usr/local, because Apple has deprecated use of
# OpenSSL in favor of its own TLS and crypto libraries."
brew install openssl
# Symlink those versions into /usr/local/lib, which gets Python to dynamically
# link against those instead of the version in /usr/lib/.
# Got the idea from https://forums.developer.apple.com/thread/119429
cd /usr/local/lib
sudo ln -s /usr/local/Cellar/openssl/1.0.2t/lib/libssl.1.0.0.dylib libssl.dylib
sudo ln -s /usr/local/Cellar/openssl/1.0.2t/lib/libcrypto.1.0.0.dylib libcrypto.dylib

Mi situación para el contexto:

  • Recientemente actualizado a MacOS 10.15
  • Yo uso python / pip instalado a través de homebrew: brew install python
  • pip3 estaba fallando con SIGABRT

Encabezado del informe de error del sistema:

Process:               Python [52429]
Path:                  /usr/local/Cellar/python/3.7.4_1/Frameworks/Python.framework/Versions/3.7/Resources/Python.app/Contents/MacOS/Python
Identifier:            Python
Version:               3.7.4 (3.7.4)
Code Type:             X86-64 (Native)
Parent Process:        zsh [43309]
Responsible:           iTerm2 [2316]
User ID:               501

Date/Time:             2019-10-09 09:52:18.148 -0700
OS Version:            Mac OS X 10.15 (19A583)
Report Version:        12
Bridge OS Version:     4.0 (17P572)
Anonymous UUID:        

Sleep/Wake UUID:       

Time Awake Since Boot: 9900 seconds
Time Since Wake:       7300 seconds

System Integrity Protection: enabled

Crashed Thread:        0  Dispatch queue: com.apple.main-thread

Exception Type:        EXC_CRASH (SIGABRT)
Exception Codes:       0x0000000000000000, 0x0000000000000000
Exception Note:        EXC_CORPSE_NOTIFY

Application Specific Information:
/usr/lib/libcrypto.dylib
abort() called
Invalid dylib load. Clients should not load the unversioned libcrypto dylib as it does not have a stable ABI.
honkaboy
fuente
29

Para mí fue suficiente reinstalar el paquete de criptografía de Python.

pip uninstall cryptography
pip install cryptography
Tony Stark
fuente
1
Funcionó para mi. En mi caso, ansible no se ejecutó después de actualizar virtualenv a la última versión.
hshan
1
¡Funcionó! ¡Gracias! Para mí, fue en pip uninstall cryptographylugar de remove.
fzwo
Esto también me lo arregló. ¡Gracias!
andrewdcato
Esto funcionó perfectamente, ¡gracias!
Sherm4n
Sí, esto hizo el truco. ¡Gracias!
Steffen Funke
17

Prefiero una combinación de @bixel, @Juro Oravec y @honkaboy responde:

brew install openssl
cd /usr/local/lib
sudo ln -s /usr/local/opt/openssl/lib/libssl.dylib libssl.dylib
sudo ln -s /usr/local/opt/openssl/lib/libcrypto.dylib libcrypto.dylib

De esta manera, al menos en teoría, al actualizar openssl, los dylibs siempre apuntarán a las últimas versiones. /usr/local/opt/openssles en realidad un enlace a/usr/local/Cellar/openssl/Cellar/openssl/1.0.2t (la versión de openssl instalada por brew).

La razón por la que ocurre el problema se explica en realidad por brew:

openssl es solo de barril, lo que significa que no se vinculó en / usr / local, porque Apple ha desaprobado el uso de OpenSSL a favor de sus propias bibliotecas TLS y criptográficas.

Intentando correr brew link openssl:

Advertencia: se niega a vincular el software proporcionado por macOS: openssl Si necesita tener openssl primero en su ejecución PATH: echo 'export PATH = "/ usr / local / opt / openssl / bin: $ PATH"' >> ~ / .bash_profile

Para que los compiladores encuentren openssl, es posible que deba configurar: export LDFLAGS = "- L / usr / local / opt / openssl / lib" export CPPFLAGS = "- I / usr / local / opt / openssl / include"

Para que pkg-config encuentre openssl, es posible que deba configurar: export PKG_CONFIG_PATH = "/ usr / local / opt / openssl / lib / pkgconfig"

Entonces, básicamente necesitas vincularlos manualmente.

Andrei Radulescu
fuente
15

r.xuan de este hilo de Apple Dev identificó los pasos de una solución alternativa para el error Invalid dylib load. Clients should not load the unversioned libcrypto dylib as it does not have a stable ABI. al reemplazar los enlaces libssl.dyliby los libcrypto.dylibenlaces /usr/local/libcon libs desde la instalación de Homebrew openssl.

Los pasos son:

Obtenga libs frescas

1) brew update && brew upgrade && brew install openssl

2) cd /usr/local/Cellar/openssl/1.0.2t/lib

3) sudo cp libssl.1.0.0.dylib libcrypto.1.0.0.dylib /usr/local/lib/

Copia de seguridad de los viejos

4) cd /usr/local/lib

5) mv libssl.dylib libssl_bak.dylib

6) mv libcrypto.dylib libcrypto_bak.dylib

Crea nuevos enlaces

7) sudo ln -s libssl.1.0.0.dylib libssl.dylib

8) sudo ln -s libcrypto.1.0.0.dylib libcrypto.dylib

JuroOravec
fuente
Esto funcionó para mí en Catalina 10.15.4, pero tenía /usr/local/Cellar/[email protected] y usé los archivos equivalentes. Usando los archivos x.1.0.0.dylib, pip3 todavía se bloqueó.
Andrew Delos Reyes
4

Debe ser el uso de algunas dependencias como la criptografía.

Solución:

cd your-site-packages-path/
vim ./asn1crypto/_int.py

encuentra esta línea; bórralo y todo está bien

# from ._perf._big_num_ctypes import libcrypto

Aqui esta mi problema

Process:               Python [85179]
Path:                  /usr/local/Cellar/python/3.7.4_1/Frameworks/Python.framework/Versions/3.7/Resources/Python.app/Contents/MacOS/Python
Identifier:            Python
Version:               3.7.4 (3.7.4)
Code Type:             X86-64 (Native)
Parent Process:        ??? [85161]
Responsible:           iTerm2 [11711]
User ID:               501

Date/Time:             2019-10-07 23:00:25.143 +0800
OS Version:            Mac OS X 10.15 (19A582a)
Report Version:        12
Bridge OS Version:     3.0 (14Y906)
Anonymous UUID:        32C73ADD-1291-FA0E-DC02-48D539674325


Time Awake Since Boot: 42000 seconds

System Integrity Protection: enabled

Crashed Thread:        0  Dispatch queue: com.apple.main-thread

Exception Type:        EXC_CRASH (SIGABRT)
Exception Codes:       0x0000000000000000, 0x0000000000000000
Exception Note:        EXC_CORPSE_NOTIFY

Application Specific Information:
/usr/lib/libcrypto.dylib
abort() called
Invalid dylib load. Clients should not load the unversioned libcrypto dylib as it does not have a stable ABI.
doscucao
fuente
4

Estaba viendo problemas similares con ansible. El culpable fue asn1crypto, y el problema ya se ha solucionado .

Mi solución fue eliminarlo manualmente y reinstalarlo con pip:

  1. rm -r /usr/local/lib/python2.7/site-packages/asn1crypto*. Esto permitió piptrabajar sin problemas.
  2. pip install asn1crypto, que instaló 1.2.0:
  Found existing installation: asn1crypto 0.24.0
    Uninstalling asn1crypto-0.24.0:
      Successfully uninstalled asn1crypto-0.24.0
Successfully installed asn1crypto-1.2.0

NOTA : Puede verificar si asn1cryptoes el culpable ejecutando pythonen modo detallado, por ejemplo python -v $(which ansible). En mi caso, se bloqueó al hacer algunas asn1cryptoimportaciones relacionadas:

# /usr/local/lib/python2.7/site-packages/asn1crypto/_perf/_big_num_ctypes.pyc matches /usr/local/lib/python2.7/site-packages/asn1crypto/_perf/_big_num_ctypes.py
import asn1crypto._perf._big_num_ctypes # precompiled from /usr/local/lib/python2.7/site-packages/asn1crypto/_perf/_big_num_ctypes.pyc
[1]    59247 abort      python -v $(which ansible)

Relacionado: https://github.com/Homebrew/homebrew-core/issues/44996

memoselyk
fuente
Este es el que funcionó para mí. Estaba usando enrejado de raíz, que usa ansible. Hice el rm -rcomando como se indica en la respuesta, luego eliminé mi entorno de python en el trellis/.trellis/virtualenvdirectorio, luego usé trellis-cli trellis initque recreé un entorno de python e instalé dependencias con pip.
robrecord
Esto funcionó para mí :)
smartworld-dm
0

Si usa Kevlar de DevMate , actualice a 4.3.1, que "solucionó el bloqueo de macOS Catalina causado por la versión de libcrypto.dylib".

Invierno
fuente
0

Parece que fue un problema de Homebrew. Lo hice brew reinstall python3y funcionó.

mylittleswift
fuente
0

Tratar:

python3 -m pip install oscrypto

¡Trabajó para mi!

Abdul Rahman
fuente
0

Para seguir las respuestas mencionadas anteriormente, quería vincular el archivo libssl.dylib pero no se encuentra la ubicación que se muestra a continuación:

/usr/local/Cellar/openssl/1.0.2t/lib/

Sin embargo, como la respuesta aceptada por @bixel encontró el archivo en la ubicación a continuación

/usr/local/opt/openssl/lib

Y funcionó para mí.

reaganRezvi
fuente
0

Me encontré con el mismo problema cuando yo estaba usando ctypes.cdllpara abrir /usr/lib/libcrypto.dylibcon Python 3.7. Sin embargo, dylibPODRÍA abrirse conPython 2.7 .

Instalé lo último opensslcon brew install, luego configuré las variables de entorno y creé enlaces como lo que sugirieron anteriormente, NADA bueno sucedió.

Después de varias horas de excavación, encontré una solución alternativa.

Encontré algunos libcrypto.X.dylibde los /usrsiguientes,

/usr/lib/libcrypto.dylib
/usr/lib/libcrypto.0.9.7.dylib
/usr/lib/libcrypto.0.9.8.dylib
/usr/lib/libcrypto.35.dylib
/usr/lib/libcrypto.41.dylib
/usr/lib/libcrypto.42.dylib
/usr/lib/libcrypto.44.dylib

/usr/local/opt/openssl/lib/libcrypto.1.1.dylib
/usr/local/opt/openssl/lib/libcrypto.dylib

En primer lugar, usé el siguiente para reemplazar eso en su /usr/liblugar.

os.environ['DYLD_FALLBACK_LIBRARY_PATH'] = '/usr/local/opt/openssl/lib'

Se podía cargar pero faltaban algunas apis,

AttributeError: dlsym(0x..., ECDH_OpenSSL): symbol not found

Creé un enlace para /usr/lib/libcrypto.X.dyliben mi ruta de script.

ln -s /usr/lib/libcrypto.X.dylib lib/libcrypto.dylib

Luego agregue la ruta a DYLD_FALLBACK_LIBRARY_PATH

os.environ['DYLD_FALLBACK_LIBRARY_PATH'] = 'lib' # It should be a absolute path

Por fin funcionó.

Song Bi
fuente