Python stürzt unter MacOS 10.15 Beta (19A582a) mit "/usr/lib/libcrypto.dylib" ab


47

Ich habe mein Django-Projekt mit dem neuen macOS Catalina ausgeführt und lief einwandfrei.
Ich habe oh_my_zsh installiert und dann versucht, dasselbe Projekt auszuführen, das mit den folgenden Fehlern abstürzt. Ich habe oh_my_zsh deinstalliert und es erneut versucht, aber es hat nicht funktioniert.

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.

Wenn Sie sich in einer virtuellen Umgebung befinden: Für mich wurde ein (vollständiger) Reset des Venv durchgeführt (Löschen und Neuerstellen mit allen Abhängigkeiten usw.)
Basti

Antworten:


94

Ich bin gerade auf das gleiche Problem gestoßen und fühlte mich etwas unwohl, Dinge manuell zu verknüpfen.

Ich konnte das Problem einfach lösen

  1. Installieren von openssl über Homebrew:
    brew install openssl
  2. Zeigen auf die dynamischen Bibliotheken von openssl über DYLD_LIBRARY_PATH:
    export DYLD_LIBRARY_PATH=/usr/local/opt/openssl/lib:$DYLD_LIBRARY_PATH

Ich habe diese Zeile gerade zu meiner .zshrc hinzugefügt.

Bearbeiten: Nach dieser Frage ist die Verwendung von DYLD_FALLBACK_LIBRARY_PATHmöglicherweise der Verwendung vorzuziehen DYLD_LIBRARY_PATH.

Edit 2: Wie weiter unten in einem Kommentar erwähnt, dies sollte wahrscheinlich die akzeptierte Antwort sein. Installieren Sie das cryptographyPaket einfach neu .


19
Upvote für das System nicht
durcheinander gebracht

Dies funktionierte auch für mich in der Befehlszeile, jedoch nicht für Skripte. Könnte etwas fehlen?
ErnestoE

2
Kann export DYLD_FALLBACK_LIBRARY_PATH=/usr/local/opt/openssl/libArbeiten wie beschrieben bestätigen. Danke für den Tipp!
Luke Hoersten

1
Dies ist großartig, um Dinge zum Laufen zu bringen, löst es aber nicht vollständig. Ich habe einige Crontab-Jobs, die Python verwenden müssen, und ich möchte nicht sicherstellen müssen, dass alle diese Env-Einrichtung haben. Ich mag die Lösung von @ Andrei unten. Es werden Symlinks zu den neuesten OpenSSL-Bibliotheken eingerichtet, sodass bei einem zukünftigen Upgrade auch die Links angezeigt werden. stackoverflow.com/a/58596931/142318
Chris

1
Jeder sollte versuchen, die Antwort von @tonyStarks unten zu beantworten, bevor dies beantwortet wird. Es kann nur eine einfache Deinstallation und Neuinstallation für Sie sein
Micheal C Wallas

38

Vorsichtsmaßnahme: Ich bin kein Sicherheitsexperte, und diese Lösung bringt Kryptobibliotheken durcheinander!

Ich glaube nicht, dass Ihr Problem von zsh oder oh-my-zsh herrührt. Meine beste Vermutung: Einige mit MacOS 10.15 installierte Kryptobibliotheken sind nicht mit der python3Installation von Homebrew kompatibel .

Hier ist, was das Problem für mich behoben hat

# 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

Meine Situation für den Kontext:

  • Kürzlich auf MacOS 10.15 aktualisiert
  • Ich verwende Python / Pip, das über Homebrew installiert wurde: brew install python
  • pip3 scheiterte mit SIGABRT

Kopfzeile des Systemfehlerberichts:

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

Für mich war es genug, das Kryptografiepaket von Python neu zu installieren.

pip uninstall cryptography
pip install cryptography

1
Es hat bei mir funktioniert. In meinem Fall wurde ansible nach dem Update von virtualenv auf die neueste Version nicht ausgeführt.
hshan

1
Es funktionierte! Vielen Dank! Für mich war es pip uninstall cryptographystatt remove.
Zwei

Das hat es auch für mich behoben. Vielen Dank!
Andrewdcato

Das hat perfekt funktioniert - danke!
Sherm4n

Ja, das hat den Trick gemacht. Vielen Dank!
Steffen Funke

17

Ich bevorzuge eine Kombination aus @bixel, @Juro Oravec & @honkaboy Antworten:

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

Auf diese Weise verweisen die Dylibs zumindest theoretisch beim Aktualisieren von openssl immer auf die neuesten Versionen. /usr/local/opt/opensslist eigentlich ein Link zu /usr/local/Cellar/openssl/Cellar/openssl/1.0.2t(die von Brew installierte Version von openssl).

Der Grund, warum das Problem auftritt, wird tatsächlich durch Brauen erklärt:

openssl ist nur für Kegs verfügbar, was bedeutet, dass es nicht mit / usr / local verknüpft wurde, da Apple die Verwendung von OpenSSL zugunsten seiner eigenen TLS- und Kryptobibliotheken abgelehnt hat.

Versuch zu rennen brew link openssl:

Warnung: Verweigerung der Verknüpfung der von macOS bereitgestellten Software: openssl Wenn Sie in Ihrem PATH-Lauf zuerst openssl benötigen: echo 'export PATH = "/ usr / local / opt / openssl / bin: $ PATH"' >> ~ / .bash_profile

Damit Compiler openssl finden können, müssen Sie möglicherweise Folgendes festlegen: export LDFLAGS = "- L / usr / local / opt / openssl / lib" export CPPFLAGS = "- I / usr / local / opt / openssl / include"

Damit pkg-config openssl findet, müssen Sie möglicherweise Folgendes festlegen: export PKG_CONFIG_PATH = "/ usr / local / opt / openssl / lib / pkgconfig"

Grundsätzlich müssen Sie sie also manuell verknüpfen.


15

r.xuan von diesem Apple - Dev - Thread identifiziert die Schritte einer Abhilfe für den Fehler Invalid dylib load. Clients should not load the unversioned libcrypto dylib as it does not have a stable ABI. durch das Ersetzen libssl.dylibund libcrypto.dylibLinks in /usr/local/libmit Links zu Libs von Homebrew des installieren von openssl.

Die Schritte sind:

Holen Sie sich frische Bibliotheken

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/

Sichern Sie die alten

4) cd /usr/local/lib

5) mv libssl.dylib libssl_bak.dylib

6) mv libcrypto.dylib libcrypto_bak.dylib

Erstellen Sie neue Links

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

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


Dies funktionierte für mich unter Catalina 10.15.4, aber ich hatte /usr/local/Cellar/openssl@1.1 und verwendete die entsprechenden Dateien. Bei Verwendung der x.1.0.0.dylib-Dateien stürzte pip3 immer noch ab.
Andrew Delos Reyes

4

Es müssen einige Abhängigkeiten wie Kryptographie verwendet werden

Lösung:

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

finde diese Zeile; lösche es und alles ist in Ordnung

# from ._perf._big_num_ctypes import libcrypto

Hier ist mein Problem

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

Ich sah ähnliche Probleme mit ansible. Der Schuldige war asn1crypto, und das Problem wurde bereits behoben .

Meine Lösung bestand darin, es manuell zu entfernen und neu zu installieren mit pip:

  1. rm -r /usr/local/lib/python2.7/site-packages/asn1crypto*. Dies ermöglichte ein pipproblemloses Arbeiten.
  2. pip install asn1crypto, die installiert 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

HINWEIS : Sie können überprüfen, ob asn1cryptoder Schuldige vorliegt, indem Sie pythonim ausführlichen Modus arbeiten, z python -v $(which ansible). In meinem Fall stürzte es bei einigen asn1cryptoverwandten Importen ab:

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

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


Dies ist derjenige, der für mich gearbeitet hat. Ich habe Spalier von Roots verwendet, das Ansible verwendet. Ich habe den rm -rin der Antwort aufgeführten Befehl ausgeführt, dann meine Python-Umgebung im trellis/.trellis/virtualenvVerzeichnis entfernt und dann mit trellis-cli trellis initeine Python-Umgebung neu erstellt und Abhängigkeiten mit pip installiert.
Robrecord

Das hat bei mir funktioniert :)
smartworld-dm

0

Wenn Sie Kevlar von DevMate verwenden , aktualisieren Sie auf 4.3.1, was "den durch die Version von libcrypto.dylib verursachten Absturz von macOS Catalina behoben hat".


0

Sieht so aus, als wäre es ein Homebrew-Problem. Ich habe brew reinstall python3es getan und es hat funktioniert.



0

Um den oben genannten Antworten zu folgen, wollte ich die Datei libssl.dylib verlinken, fand aber keinen der folgenden Speicherorte:

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

Als akzeptierte Antwort von @bixel fand sich die Datei jedoch unter dem Speicherort

/usr/local/opt/openssl/lib

und es hat bei mir funktioniert.


0

Ich traf das gleiche Problem , wenn ich mit ctypes.cdllöffnen /usr/lib/libcrypto.dylibmit Python 3.7. Das dylibKÖNNTE jedoch mit geöffnet werden Python 2.7.

Ich habe die neueste Version opensslmit installiert brew install, dann die Umgebungsvariablen festgelegt und Links wie oben vorgeschlagen erstellt. Es ist NICHTS Gutes passiert.

Nach einigen Stunden des Grabens fand ich eine Problemumgehungslösung.

Ich fand einige libcrypto.X.dylibin /usrwie folgt:

/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

Erstens habe ich das folgende verwendet, um das /usr/libstattdessen zu ersetzen .

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

Es konnte geladen werden, aber einige Apis fehlten,

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

Ich habe einen Link für /usr/lib/libcrypto.X.dylibin meinem Skriptpfad erstellt.

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

Fügen Sie dann den Pfad zu hinzu DYLD_FALLBACK_LIBRARY_PATH

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

Endlich hat es funktioniert.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.