Python si arresta in modo anomalo su MacOS 10.15 Beta (19A582a) con "/usr/lib/libcrypto.dylib"


47

Ho gestito il mio progetto Django con il nuovo macOS Catalina e stavo andando bene.
Ho installato oh_my_zsh quindi ho provato a eseguire lo stesso progetto che si sta bloccando con i seguenti errori. Ho disinstallato oh_my_zsh e riprovato ma non ha funzionato.

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.

Se sei in virtualenv: per me ha funzionato un (completo) reset del venv (eliminandolo e ricrearlo con tutte le dipendenze ecc.)
basti

Risposte:


94

Mi sono appena imbattuto nello stesso problema e mi sono sentito un po 'a disagio nel collegare manualmente le cose.

Sono stato in grado di risolvere il problema semplicemente

  1. Installazione di openssl tramite homebrew:
    brew install openssl
  2. Puntando verso le librerie dinamiche da openssl tramite DYLD_LIBRARY_PATH:
    export DYLD_LIBRARY_PATH=/usr/local/opt/openssl/lib:$DYLD_LIBRARY_PATH

Ho appena aggiunto quella riga al mio .zshrc.

Modifica: in base a questa domanda , l'uso di DYLD_FALLBACK_LIBRARY_PATHpotrebbe essere preferibile rispetto a DYLD_LIBRARY_PATH.

Modifica 2: Come menzionato in un commento di seguito, questa dovrebbe probabilmente essere la risposta accettata. Basta reinstallare il cryptographypacchetto.


19
voto per non aver
rovinato

Questo ha funzionato anche per me nella riga di comando, tuttavia non ha funzionato per gli script. Potrebbe esserci qualcosa che manca?
ErnestoE,

2
Può confermare i export DYLD_FALLBACK_LIBRARY_PATH=/usr/local/opt/openssl/liblavori come descritto. Grazie per il consiglio!
Luke Hoersten,

1
Questo è ottimo per far funzionare le cose ma non le risolve del tutto. Ho alcuni lavori crontab che devono usare Python e non voglio assicurarmi che tutti abbiano questa configurazione env. Mi piace la soluzione di @ Andrei qui sotto. Imposta collegamenti simbolici a qualunque sia la versione più recente delle librerie openssl in modo tale che quando verrà aggiornato in futuro anche i collegamenti lo saranno. stackoverflow.com/a/58596931/142318
Chris

1
Tutti dovrebbero provare @tonyStarks a rispondere prima di questo, potrebbe essere solo una facile disinstallazione e reinstallazione per te
Micheal C Wallas,

38

Avvertenza: non sono un esperto di sicurezza e questa soluzione fa casino con le librerie crittografiche!

Non credo che il tuo problema derivi da zsh o oh-my-zsh. La mia ipotesi migliore: alcune librerie di crittografia installate con MacOS 10.15 sono incompatibili con l' python3installazione di Homebrew .

Ecco cosa ha risolto il problema per me

# 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

La mia situazione per il contesto:

  • Aggiornato di recente a MacOS 10.15
  • Uso python / pip installato tramite homebrew: brew install python
  • pip3 stava fallendo SIGABRT

Intestazione del rapporto errori di 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.

29

Per me è stato sufficiente reinstallare il pacchetto di crittografia di Python.

pip uninstall cryptography
pip install cryptography

1
Ha funzionato per me. Nel mio caso ansible non è stato eseguito dopo l'aggiornamento di virtualenv all'ultima versione.
Hshan,

1
Ha funzionato! Grazie! Per me è stato pip uninstall cryptographyinvece di remove.
dal

Questo ha risolto anche per me. Grazie!
Andrewdcato

Questo ha funzionato perfettamente - grazie!
Sherm4n,

Sì, questo ha funzionato. Grazie!
Steffen Funke,

17

Preferisco una combinazione di risposte @bixel, @Juro Oravec e @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

In questo modo, almeno in teoria, durante l'aggiornamento di opensl i dylibs indicheranno sempre le ultime versioni. /usr/local/opt/opensslè in realtà un collegamento a/usr/local/Cellar/openssl/Cellar/openssl/1.0.2t (la versione di openssl installata da brew).

Il motivo per cui si verifica il problema è in realtà spiegato da brew:

openssl è solo keg, il che significa che non è stato collegato in modo simbolico in / usr / local, perché Apple ha deprecato l'uso di OpenSSL a favore delle proprie librerie TLS e crittografiche.

Cercando di eseguire brew link openssl:

Avvertenza: rifiuto di collegare il software fornito da macOS: openssl Se è necessario disporre di openssl per primo nella corsa PATH: echo 'export PATH = "/ usr / local / opt / openssl / bin: $ PATH"' >> ~ / .bash_profile

Affinché i compilatori possano trovare openssl potrebbe essere necessario impostare: export LDFLAGS = "- L / usr / local / opt / openssl / lib" export CPPFLAGS = "- I / usr / local / opt / openssl / include"

Per pkg-config per trovare openssl potrebbe essere necessario impostare: export PKG_CONFIG_PATH = "/ usr / local / opt / openssl / lib / pkgconfig"

Quindi, in pratica, devi collegarli manualmente.


15

r.xuan da questo thread di Apple Dev ha identificato i passaggi di una soluzione alternativa per l'errore Invalid dylib load. Clients should not load the unversioned libcrypto dylib as it does not have a stable ABI. sostituendo libssl.dylibe libcrypto.dylibcollegamenti /usr/local/libcon collegamenti a librerie dall'installazione di Homebrew diopenssl .

I passaggi sono:

Ottieni nuove librerie

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/

Fai il backup di quelli vecchi

4) cd /usr/local/lib

5) mv libssl.dylib libssl_bak.dylib

6) mv libcrypto.dylib libcrypto_bak.dylib

Crea nuovi collegamenti

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

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


Questo ha funzionato per me su Catalina 10.15.4, ma avevo /usr/local/Cellar/openssl@1.1 e ho usato i file equivalenti. Utilizzando i file x.1.0.0.dylib, pip3 si è comunque arrestato in modo anomalo.
Andrew Delos Reyes,

4

Deve essere l'utilizzo di alcune dipendenze come la crittografia

Soluzione:

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

trova questa linea; cancellalo e tutto è ok

# from ._perf._big_num_ctypes import libcrypto

Ecco il mio 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.

4

Stavo vedendo problemi simili con ansible. Il colpevole era asn1cryptoe il problema è già stato risolto .

La mia soluzione era rimuoverlo manualmente e reinstallarlo con pip:

  1. rm -r /usr/local/lib/python2.7/site-packages/asn1crypto*. Ciò ha permesso pipdi funzionare senza problemi.
  2. pip install asn1crypto, che ha installato 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 : è possibile verificare se asn1cryptoè il colpevole eseguendo pythonin modalità dettagliata, ad es python -v $(which ansible). Nel mio caso si è bloccato durante alcune asn1cryptoimportazioni correlate:

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

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


Questo è quello che ha funzionato per me. Stavo usando il traliccio per radice, che usa ansible. Ho eseguito il rm -rcomando come elencato nella risposta, quindi ho rimosso il mio ambiente Python nella trellis/.trellis/virtualenvdirectory, quindi ho usato Trellis-Cli che ha trellis initricreato un ambiente Python e installato dipendenze con pip.
robrecord,

Questo ha funzionato per me :)
smartworld-dm il

0

Se stai usando Kevlar da DevMate , esegui l' upgrade a 4.3.1, che "Risolto il crash di macOS Catalina causato dalla versione di libcrypto.dylib".


0

Sembra sia stato un problema di Homebrew. L'ho fatto brew reinstall python3e ha funzionato.



0

Per seguire le risposte sopra menzionate, volevo collegare il file libssl.dylib ma non è stato trovato il percorso seguente:

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

Tuttavia, poiché la risposta accettata da @bixel ha trovato il file nella posizione seguente

/usr/local/opt/openssl/lib

e ha funzionato per me.


0

Ho incontrato lo stesso problema quando stavo usando ctypes.cdllper aprire /usr/lib/libcrypto.dylibcon Python 3.7. Tuttavia, dylibPOTREBBE essere aperto conPython 2.7 .

Ho installato l'ultimo opensslconbrew install , quindi impostare le variabili di ambiente ei collegamenti creati come quello che hanno suggerito sopra, nulla di buono è stato successo.

Dopo diverse ore di scavo, ho trovato una soluzione alternativa.

Ho trovato un po ' libcrypto.X.dylibnel /usrmodo seguente,

/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

In primo luogo, ho usato quello seguito per sostituirlo /usr/lib.

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

Potrebbe essere caricato ma mancavano alcune API,

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

Ho creato un collegamento per /usr/lib/libcrypto.X.dylibnel mio percorso di script.

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

Quindi aggiungi il percorso a DYLD_FALLBACK_LIBRARY_PATH

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

Alla fine ha funzionato.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.