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


47

J'ai couru mon projet Django avec le nouveau macOS Catalina et fonctionnait 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.


Si vous êtes dans un virtualenv: Pour moi, j'ai effectué une réinitialisation (complète) du venv (le supprimer et le recréer avec toutes les dépendances, etc.)
basti

Réponses:


94

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_PATHpourrait être préférable à DYLD_LIBRARY_PATH.

Edit 2: Comme mentionné dans un commentaire ci-dessous, cela devrait probablement être la réponse acceptée. Réinstallez simplement le cryptographypackage.


19
vote positif pour ne pas avoir gâché le système
Jingshao Chen

Cela a également fonctionné pour moi dans la ligne de commande, mais cela n'a pas fonctionné pour les scripts. Pourrait-il y avoir quelque chose qui manque?
ErnestoE

2
Peut confirmer les export DYLD_FALLBACK_LIBRARY_PATH=/usr/local/opt/openssl/libtravaux comme vous l'avez décrit. Merci pour le conseil!
Luke Hoersten

1
C'est idéal pour faire fonctionner les choses mais ne le résout pas entièrement. J'ai des tâches crontab qui doivent utiliser Python et je ne veux pas m'assurer qu'elles ont toutes cette configuration env. J'aime la solution de @ Andrei ci-dessous. Il met en place des liens symboliques vers les dernières bibliothèques openssl afin que, lors de sa mise à niveau future, les liens le soient également. stackoverflow.com/a/58596931/142318
Chris

1
Tout le monde devrait essayer la réponse @tonyStarks ci-dessous avant celle-ci, cela peut être une désinstallation et une réinstallation faciles pour vous
Micheal C Wallas

38

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' python3installation 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 échouait 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.

29

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

pip uninstall cryptography
pip install cryptography

1
Ça a marché pour moi. Dans mon cas, ansible n'a pas été exécuté après la mise à jour de virtualenv vers la dernière version.
hshan

1
Ça a marché! Merci! Pour moi, c'était pip uninstall cryptographyau lieu de remove.
fzwo

Cela me l'a également corrigé. Merci!
andrewdcato

Cela a parfaitement fonctionné - merci!
Sherm4n

Oui, cela a fait l'affaire. Merci!
Steffen Funke

17

Je préfère une combinaison des réponses @bixel, @Juro Oravec & @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/opensslest 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 en fût, 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 de courir brew link openssl:

Avertissement: Refus 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

r.xuan de ce fil Apple Dev a identifié les étapes d'une solution de contournement de l'erreur Invalid dylib load. Clients should not load the unversioned libcrypto dylib as it does not have a stable ABI. en remplaçant les liens libssl.dylibet par des liens vers des bibliothèques à partir de l'installation de Homebrew .libcrypto.dylib/usr/local/libopenssl

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


Cela a fonctionné pour moi sur Catalina 10.15.4, mais j'avais /usr/local/Cellar/openssl@1.1 et utilisé les fichiers équivalents. À l'aide des fichiers x.1.0.0.dylib, pip3 se bloquait toujours.
Andrew Delos Reyes

4

Cela doit être l'utilisation de certaines dépendances comme la 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.

4

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

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 pipde travailler 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

REMARQUE : Vous pouvez vérifier si asn1cryptoc'est le coupable en exécutant pythonen mode détaillé, par exemple python -v $(which ansible). Dans mon cas, il s'est écrasé lors de certaines asn1cryptoimportations associées:

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


C'est celui qui a fonctionné pour moi. J'utilisais le treillis par racines, qui utilise ansible. J'ai fait la rm -rcommande comme indiqué dans la réponse, puis j'ai supprimé mon environnement python dans le trellis/.trellis/virtualenvrépertoire, puis j'ai utilisé trellis-cli trellis initqui a recréé un environnement python et installé les dépendances avec pip.
robrecord

Cela a fonctionné pour moi :)
smartworld-dm

0

Si vous utilisez Kevlar de DevMate , effectuez une mise à niveau vers 4.3.1, qui "Correction d'un plantage de macOS Catalina provoqué par la version de libcrypto.dylib".


0

On dirait que c'était un problème Homebrew. Je l'ai fait brew reinstall python3et cela a fonctionné.



0

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

J'ai rencontré le même problème lorsque j'utilisais ctypes.cdllpour ouvrir /usr/lib/libcrypto.dylibavec Python 3.7. Cependant, dylibPOURRAIT être ouvert avecPython 2.7 .

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

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

J'ai trouvé quelques libcrypto.X.dylibdans la /usrmanière suivante,

/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é le suivant pour le remplacer à la /usr/libplace.

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.dylibdans 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é.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.