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.