Python travando no MacOS 10.15 Beta (19A582a) com "/usr/lib/libcrypto.dylib"


47

Executei meu projeto Django com o novo macOS Catalina e estava funcionando bem.
Eu instalei oh_my_zsh e tentei executar o mesmo projeto que está travando com os seguintes erros. Eu desinstalei o oh_my_zsh e tentei novamente, mas não funcionou.

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 você está em um virtualenv: Para mim funcionou um reset (completa) da venv (excluí-la e recriá-lo com todas as dependências etc.)
basti

Respostas:


94

Acabei de encontrar o mesmo problema e me senti um pouco desconfortável ao vincular manualmente as coisas.

Consegui resolver o problema simplesmente

  1. Instalando o openssl via homebrew:
    brew install openssl
  2. Apontando para as bibliotecas dinâmicas do openssl via DYLD_LIBRARY_PATH:
    export DYLD_LIBRARY_PATH=/usr/local/opt/openssl/lib:$DYLD_LIBRARY_PATH

Acabei de adicionar essa linha ao meu .zshrc.

Edit: De acordo com esta pergunta , o uso de DYLD_FALLBACK_LIBRARY_PATHpode ser preferível DYLD_LIBRARY_PATH.

Edit 2: Como mencionado em um comentário abaixo, esta provavelmente deve ser a resposta aceita. Simplesmente reinstale o cryptographypacote.


19
upvote para não bagunçar o sistema
Jingshao Chen

Isso também funcionou para mim na linha de comando, no entanto, não funcionou para scripts. Poderia haver algo faltando?
ErnestoE 02/11/19

2
Pode confirmar export DYLD_FALLBACK_LIBRARY_PATH=/usr/local/opt/openssl/libtrabalhos como você descreveu. Obrigado pela dica!
Luke Hoersten 16/11/19

11
Isso é ótimo para fazer as coisas funcionarem, mas não resolve completamente. Tenho alguns trabalhos do crontab que precisam usar o Python e não quero ter certeza de que todos eles tenham essa configuração de ambiente. Gosto da solução da @ Andrei abaixo. Ele configura links simbólicos para quaisquer que sejam as últimas bibliotecas openssl, para que, quando atualizadas no futuro, os links também sejam. stackoverflow.com/a/58596931/142318
Chris

11
Todos devem tentar a resposta @tonyStarks abaixo antes desta, pode ser apenas uma desinstalação e reinstalação fáceis para você
Micheal C Wallas

38

Advertência: Eu não sou especialista em segurança, e esta solução mexe com bibliotecas de criptografia!

Não acho que seu problema decorra de zsh ou oh-my-zsh. Meu melhor palpite: algumas bibliotecas de criptografia instaladas no MacOS 10.15 são incompatíveis com a python3instalação do Homebrew .

Aqui está o que corrigiu o problema para mim

# 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

Minha situação para o contexto:

  • Atualizado recentemente para o MacOS 10.15
  • Eu uso python / pip instalado via homebrew: brew install python
  • pip3 estava falhando com SIGABRT

Cabeçalho do relatório de erros do 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

Para mim, bastava reinstalar o pacote de criptografia do Python.

pip uninstall cryptography
pip install cryptography

11
Funcionou para mim. No meu caso, o ansible não foi executado após a atualização do virtualenv para a versão mais recente.
hshan 15/01

11
Funcionou! Obrigado! Para mim, foi em pip uninstall cryptographyvez de remove.
fzwo 29/01

Isso corrigiu para mim também. Obrigado!
andrewdcato

Isso funcionou perfeitamente - obrigado!
Sherm4n 25/02

Sim, isso fez o truque. Obrigado!
Steffen Funke

17

Prefiro uma combinação de respostas @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

Dessa forma, pelo menos em teoria, ao atualizar o openssl, os dylibs sempre apontarão para as versões mais recentes. /usr/local/opt/opensslé na verdade um link para /usr/local/Cellar/openssl/Cellar/openssl/1.0.2t(a versão do openssl instalada pelo brew).

A razão pela qual o problema ocorre é realmente explicada pelo brew:

O openssl é apenas para barril, o que significa que não foi vinculado a / usr / local, porque a Apple descontinuou o uso do OpenSSL em favor de suas próprias bibliotecas TLS e criptografia.

Tentando executar brew link openssl:

Aviso: Recusando-se a vincular o software fornecido ao macOS: openssl Se você precisar ter o openssl primeiro em sua execução no PATH: echo 'export PATH = "/ usr / local / opt / openssl / bin: $ PATH"' >> ~ / .bash_profile

Para que os compiladores encontrem o openssl, pode ser necessário definir: export LDFLAGS = "- L / usr / local / opt / openssl / lib" export CPPFLAGS = "- I / usr / local / opt / openssl / include"

Para que o pkg-config encontre o openssl, talvez seja necessário definir: export PKG_CONFIG_PATH = "/ usr / local / opt / openssl / lib / pkgconfig"

Então, basicamente você precisa vinculá-los manualmente.


15

O r.xuan deste encadeamento Apple Dev identificou as etapas de uma solução alternativa para o erro Invalid dylib load. Clients should not load the unversioned libcrypto dylib as it does not have a stable ABI. substituindo os links libssl.dylibe libcrypto.dylibem/usr/local/lib por links para bibliotecas da instalação do Homebrew de openssl.

Os passos são:

Obter novas bibliotecas

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/

Faça backup dos antigos

4) cd /usr/local/lib

5) mv libssl.dylib libssl_bak.dylib

6) mv libcrypto.dylib libcrypto_bak.dylib

Crie novos links

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

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


Isso funcionou para mim no Catalina 10.15.4, mas eu tinha /usr/local/Cellar/openssl@1.1 e usei os arquivos equivalentes. Usando os arquivos x.1.0.0.dylib, o pip3 ainda travava.
Andrew Delos Reyes

4

Deve ser o uso de algumas dependências, como criptografia

Solução:

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

encontre esta linha; exclua e tudo está ok

# from ._perf._big_num_ctypes import libcrypto

Aqui está o meu 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

Eu estava vendo problemas semelhantes com ansible. O culpado foi asn1cryptoe o problema já foi corrigido .

Minha solução foi removê-lo manualmente e reinstalá-lo com pip:

  1. rm -r /usr/local/lib/python2.7/site-packages/asn1crypto*. Isso permitiu piptrabalhar sem problemas.
  2. pip install asn1crypto, que instalou 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 : Você pode verificar se asn1cryptoé o culpado executando pythonno modo detalhado, por exemplo python -v $(which ansible). No meu caso, ele travou ao fazer algumas asn1cryptoimportações relacionadas:

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

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


Este é o que funcionou para mim. Eu estava usando treliça por raízes, que usa ansible. Eu executei o rm -rcomando conforme listado na resposta, depois removi meu ambiente python no trellis/.trellis/virtualenvdiretório e, em seguida, usei o trellis-cli trellis initque recriou um ambiente python e instalou dependências com o pip.
robrecord

Isso funcionou para mim :)
smartworld-dm

0

Se você estiver usando o Kevlar do DevMate , atualize para o 4.3.1, que corrigiu "Falha no macOS Catalina causada pela versão do libcrypto.dylib".


0

Parece que foi um problema do Homebrew. Eu fiz brew reinstall python3e funcionou.



0

Para seguir as respostas mencionadas acima, você queria vincular o arquivo libssl.dylib, mas não encontrou o local abaixo:

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

No entanto, como a resposta aceita por @bixel encontrou o arquivo no local abaixo

/usr/local/opt/openssl/lib

e funcionou para mim.


0

Eu conheci o mesmo problema quando eu estava usando ctypes.cdllpara abrir /usr/lib/libcrypto.dylibcom Python 3.7. No entanto, o dylibPODE ser aberto comPython 2.7 .

Eu instalei o mais recente opensslcom brew install, em seguida, definai as variáveis ​​de ambiente e criei os links conforme sugerido acima, nada de bom aconteceu.

Após várias horas de escavação, encontrei uma solução alternativa.

Eu encontrei alguns libcrypto.X.dylibna /usrda seguinte forma,

/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

Em primeiro lugar, usei o seguinte para substituí-lo /usr/lib.

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

Pode ser carregado, mas faltam algumas APIs,

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

Eu criei um link para /usr/lib/libcrypto.X.dylibno meu caminho de script.

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

Em seguida, adicione o caminho para DYLD_FALLBACK_LIBRARY_PATH

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

Por fim, funcionou.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.