Сбой Python в MacOS 10.15 Beta (19A582a) с «/usr/lib/libcrypto.dylib» - PullRequest
16 голосов
/ 07 октября 2019

Я запустил свой проект Django с новой macOS Catalina и работал нормально.
Я установил oh_my_zsh, затем попытался запустить тот же проект, который аварийно завершает работу со следующими ошибками. Я удалил oh_my_zsh и попытался снова, но это не сработало.

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.

Ответы [ 5 ]

25 голосов
/ 09 октября 2019

Предостережение: я не эксперт по безопасности, и это решение портит криптографические библиотеки!

Не думаю, что ваша проблема проистекает из zsh или oh-my-zsh. Мое лучшее предположение: некоторые крипто-библиотеки, установленные с MacOS 10.15, несовместимы с установкой Homebrew python3.

Вот что исправило проблему для меня

# 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

Моя ситуация для контекста:

  • Недавно обновлен до MacOS 10.15
  • Я использую python / pip, установленный через homebrew: brew install python
  • pip3Сбой при SIGABRT

Заголовок отчета об ошибке системы:

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.
21 голосов
/ 18 октября 2019

Я только что столкнулся с той же проблемой, и мне было немного неудобно вручную связывать вещи вокруг.

Мне удалось решить проблему, просто

  1. Установка openssl через homebrew:
    brew install openssl
    
  2. Указание на динамические библиотеки из openssl через DYLD_LIBRARY_PATH:
    export DYLD_LIBRARY_PATH=/usr/local/opt/openssl/lib:$DYLD_LIBRARY_PATH
    

Я только что добавил эту строку в свой .zshrc.

Редактировать: Согласно этот вопрос , использование DYLD_FALLBACK_LIBRARY_PATH может быть предпочтительнее, чем DYLD_LIBRARY_PATH.

8 голосов
/ 14 октября 2019

r.xuan из этой ветки Apple Dev определили шаги обхода ошибки Invalid dylib load. Clients should not load the unversioned libcrypto dylib as it does not have a stable ABI., заменив ссылки libssl.dylib и libcrypto.dylib в /usr/local/lib ссылками на библиотеки из Homebrew'sустановка openssl.

Шаги:

Получить свежие библиотеки

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/

Резервное копирование старых

4) cd /usr/local/lib

5) mv libssl.dylib libssl_bak.dylib

6) mv libcrypto.dylib libcrypto_bak.dylib

Создание новых ссылок

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

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

4 голосов
/ 28 октября 2019

Я предпочитаю комбинацию @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

Таким образом, по крайней мере в теории, при обновлении openssl, dylibs всегда будут указывать на последние версии. /usr/local/opt/openssl на самом деле является ссылкой на /usr/local/Cellar/openssl/Cellar/openssl/1.0.2t (версия openssl, установленная brew).

Причина возникновения проблемы на самом деле объясняется brew:

openssl is keg-только, что означает, что он не был связан с / usr / local, потому что Apple устарела использовать OpenSSL в пользу своих собственных библиотек TLS и шифрования.

Попытка запустить brew link openssl:

Предупреждение. Отказ от ссылки на программное обеспечение, предоставляемое macOS: openssl Если вам нужно сначала запустить openssl в вашем запуске PATH: echo 'export PATH = "/ usr / local / opt / openssl / bin: $ PATH"'>> ~ / .bash_profile

Чтобы компиляторы могли найти openssl, вам может потребоваться установить: export LDFLAGS = "- L / usr / local / opt / openssl / lib" export CPPFLAGS = "- I / usr /local / opt / openssl / include "

Чтобы pkg-config могла найти openssl, вам может потребоваться установить: export PKG_CONFIG_PATH =" / usr / local / opt / openssl / lib / pkgconfig "

Итак, вам нужно связать их вручную.

1 голос
/ 08 октября 2019

Должно быть использование некоторых зависимостей, таких как криптография

Решение:

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

найти эту строку;удали его, и все в порядке

# from ._perf._big_num_ctypes import libcrypto

Вот моя проблема

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