web-dev-qa-db-fra.com

Python plante sur MacOS 10.15 Beta (19A582a) avec "/usr/lib/libcrypto.dylib"

J'ai exécuté mon projet Django avec le nouveau macOS Catalina et je fonctionnais bien.
J'ai installé oh_my_zsh puis j'ai essayé d'exécuter le même projet qu'il plante avec les erreurs suivantes. J'ai désinstallé oh_my_zsh et réessayé mais cela n'a pas fonctionné.

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.

46
Faisal Manzer

Je viens de rencontrer le même problème et je me sentais un peu mal à l'aise de lier manuellement les choses.

J'ai pu résoudre le problème simplement

  1. Installer openssl via homebrew:
    brew install openssl
    
  2. Pointant vers les bibliothèques dynamiques d'OpenSL via DYLD_LIBRARY_PATH:
    export DYLD_LIBRARY_PATH=/usr/local/opt/openssl/lib:$DYLD_LIBRARY_PATH
    

Je viens d'ajouter cette ligne à mon .zshrc.

Edit: Selon cette question , l'utilisation de DYLD_FALLBACK_LIBRARY_PATH pourrait être préférable à DYLD_LIBRARY_PATH.

82
bixel

Attention: je ne suis pas un expert en sécurité, et cette solution gâche les crypto-bibliothèques!

Je ne pense pas que votre problème découle de zsh ou oh-my-zsh. Ma meilleure supposition: certaines bibliothèques de chiffrement installées avec MacOS 10.15 sont incompatibles avec l'installation de python3 De Homebrew.

Voici ce qui a résolu le problème pour moi

# 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

Ma situation pour le contexte:

  • Récemment mis à niveau vers MacOS 10.15
  • J'utilise python/pip installé via homebrew: brew install python
  • pip3 A échoué avec SIGABRT

En-tête du rapport d'erreur système:

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.
36
honkaboy

Pour moi, il suffisait de réinstaller le paquet de cryptographie de Python.

pip uninstall cryptography
pip install cryptography
19
Tony Stark

Je préfère une combinaison de @bixel, @Juro Oravec et @honkaboy:

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 cette façon, du moins en théorie, lors de la mise à jour d'OpenSL, les dylibs pointeront toujours vers les dernières versions. /usr/local/opt/openssl est en fait un lien vers /usr/local/Cellar/openssl/Cellar/openssl/1.0.2t (la version de openssl installée par brew).

La raison pour laquelle le problème se produit est en fait expliquée par brew:

openssl est uniquement keg, ce qui signifie qu'il n'était pas lié à/usr/local, car Apple a déconseillé l'utilisation d'OpenSSL au profit de ses propres bibliothèques TLS et crypto.

Essayer d'exécuter brew link openssl:

Avertissement: Refuser de lier un logiciel fourni par macOS: openssl Si vous devez avoir d'abord openssl dans votre exécution PATH: echo 'export PATH = "/ usr/local/opt/openssl/bin: $ PATH"' >> ~/.bash_profile

Pour que les compilateurs trouvent openssl, vous devrez peut-être définir: export LDFLAGS = "- L/usr/local/opt/openssl/lib" export CPPFLAGS = "- I/usr/local/opt/openssl/include"

Pour que pkg-config trouve openssl, vous devrez peut-être définir: export PKG_CONFIG_PATH = "/ usr/local/opt/openssl/lib/pkgconfig"

Donc, fondamentalement, vous devez les lier manuellement.

15
Andrei Radulescu

r.xuan de ce Apple Dev thread a identifié les étapes d'une solution de contournement pour l'erreur Invalid dylib load. Clients should not load the unversioned libcrypto dylib as it does not have a stable ABI. en remplaçant le libssl.dylib et libcrypto.dylib liens dans /usr/local/lib avec des liens vers les bibliothèques de l'installation de Homebrew de openssl.

Les étapes sont les suivantes:

Obtenez de nouvelles bibliothèques

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/

Sauvegardez les anciens

4) cd /usr/local/lib

5) mv libssl.dylib libssl_bak.dylib

6) mv libcrypto.dylib libcrypto_bak.dylib

Créer de nouveaux liens

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

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

13
JuroOravec

Cela doit être l'utilisation de certaines dépendances comme cryptographie

Solution:

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

trouver cette ligne; supprimez-le et tout va bien

# from ._perf._big_num_ctypes import libcrypto

Voici mon problème

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.
3
twocucao

Je voyais des problèmes similaires avec ansible. Le coupable était asn1crypto, Et le problème a été déjà corrigé .

Ma solution était de le supprimer manuellement et de le réinstaller avec pip:

  1. rm -r /usr/local/lib/python2.7/site-packages/asn1crypto*. Cela a permis à pip de fonctionner sans problème.
  2. pip install asn1crypto, Qui a installé 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

[~ # ~] note [~ # ~] : Vous pouvez vérifier si asn1crypto est le coupable en exécutant python en mode verbeux, par exemple python -v $(which ansible). Dans mon cas, il s'est écrasé lors de certaines importations liées à asn1crypto:

# /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)

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

3
memoselyk

Si vous utilisez Kevlar à partir de DevMate , passez à 4.3.1, qui "Correction d'un crash de macOS Catalina provoqué par la version de libcrypto.dylib".

0
Winter

Pour suivre les réponses mentionnées ci-dessus, je voulais lier le fichier libssl.dylib mais il n'y a aucun emplacement comme ci-dessous:

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

Cependant, comme la réponse acceptée par @bixel a trouvé le fichier à l'emplacement ci-dessous

/usr/local/opt/openssl/lib

et cela a fonctionné pour moi.

0
reaganRezvi

J'ai rencontré le même problème lorsque j'utilisais ctypes.cdll ouvrir /usr/lib/libcrypto.dylib avec Python 3.7. Cependant, dylib POURRAIT être ouvert avec Python 2.7.

J'ai installé la dernière openssl avec brew install, puis définissez les variables d'environnement et créé des liens comme ils l'ont suggéré ci-dessus, RIEN de bien ne s'est produit.

Après plusieurs heures de creusage, j'ai trouvé une solution de contournement.

J'ai trouvé quelques libcrypto.X.dylib dans /usr comme suit,

/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

Tout d'abord, j'ai utilisé celui suivi pour remplacer celui dans /usr/lib au lieu.

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

Il pouvait être chargé mais certains apis manquaient,

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

J'ai créé un lien pour /usr/lib/libcrypto.X.dylib dans mon chemin de script.

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

Ajoutez ensuite le chemin d'accès à DYLD_FALLBACK_LIBRARY_PATH

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

Enfin, cela a fonctionné.

0
Song Bi

Essayer:

python3 -m pip install oscrypto

A travaillé pour moi!

0
Abdul Rahman

On dirait que c'était un problème Homebrew. J'ai fait brew reinstall python3 et cela a fonctionné.

0
mylittleswift