Сбой Python в MacOS 10.15 Beta (19A582a) с «/usr/lib/libcrypto.dylib»

47

Я запустил свой проект 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.
Фейсал Манцер
источник
Если вы находитесь в virtualenv: Для меня работал (полный) сброс venv (удалить его и воссоздать его со всеми зависимостями и т.д.)
Басти

Ответы:

94

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

Я смог решить проблему, просто

  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.

Изменить 2: Как упомянуто в комментарии ниже, это, вероятно, должен быть принятый ответ. Просто переустановите cryptographyпакет.

bixel
источник
19
голос за то, что не испортил систему
Jingshao Chen
Это также работает для меня в командной строке, однако это не работает для сценариев. Может быть чего-то не хватает?
ErnestoE
2
Можете подтвердить export DYLD_FALLBACK_LIBRARY_PATH=/usr/local/opt/openssl/libработы, как вы описали. Спасибо за совет!
Люк Хёрстен
1
Это замечательно для того, чтобы заставить вещи работать, но не решает это полностью. У меня есть несколько заданий crontab, которые должны использовать Python, и я не хочу убедиться, что у них всех есть эта настройка env. Мне нравится решение @ Andrei ниже. Он устанавливает символические ссылки на все последние версии openssl, так что когда он будет обновлен в будущем, ссылки также будут. stackoverflow.com/a/58596931/142318
Крис
1
Каждый должен попробовать ответ @tonyStarks ниже, прежде чем этот, это может быть просто удалить и переустановить для вас
Micheal C Wallas
38

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

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

Вот что решило проблему для меня

# 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.
honkaboy
источник
29

Для меня было достаточно переустановить пакет шифрования Python.

pip uninstall cryptography
pip install cryptography
Тони Старк
источник
1
Это сработало для меня. В моем случае ansible не выполнялся после обновления virtualenv до последней версии.
hshan
1
Это сработало! Спасибо! Для меня это было pip uninstall cryptographyвместо remove.
fzwo
Это исправило это и для меня. Спасибо!
Andrewdcato
Это сработало отлично - спасибо!
Sherm4n
Да, это помогло. Спасибо!
Штеффен Функе
17

Я предпочитаю сочетание @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 предназначен только для бочонков, что означает, что он не был связан с / usr / local, потому что Apple отказалась от использования OpenSSL в пользу своих собственных библиотек TLS и crypto.

Попытка запустить 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"

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

Андрей Радулеску
источник
15

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ссылками на библиотеки из установки Homebrewopenssl .

Шаги:

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

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

JuroOravec
источник
Это работало для меня на Catalina 10.15.4, но я использовал /usr/local/Cellar/openssl@1.1 и использовал эквивалентные файлы. При использовании файлов x.1.0.0.dylib pip3 все еще не работал.
Эндрю Делос Рейес
4

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

Решение:

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.
twocucao
источник
4

Я видел похожие проблемы с ansible. Виновник был asn1crypto, а проблема уже исправлена .

Мое решение состояло в том, чтобы вручную удалить это и переустановить это с pip:

  1. rm -r /usr/local/lib/python2.7/site-packages/asn1crypto*, Это позволило pipработать без проблем.
  2. pip install asn1crypto, который установил 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

ПРИМЕЧАНИЕ : вы можете проверить, asn1cryptoявляется ли виновником, запустив pythonв подробном режиме, например python -v $(which ansible). В моем случае это произошло сбой при выполнении некоторых asn1cryptoсвязанных импортов:

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

Связанный: https://github.com/Homebrew/homebrew-core/issues/44996

memoselyk
источник
Это тот, который работал для меня. Я использовал решетки по корням, который использует ANSIBLE. Я выполнил rm -rкоманду, указанную в ответе, затем удалил свою среду Python в trellis/.trellis/virtualenvкаталоге, затем использовал trellis-cli, trellis initкоторый воссоздал среду Python и установил зависимости с помощью pip.
Робокорд
Это сработало для меня :)
Smartworld-DM
0

Если вы используете Kevlar из DevMate , обновитесь до 4.3.1, в котором «исправлено падение macOS Catalina, вызванное версией libcrypto.dylib».

зима
источник
0

Похоже, это была проблема доморощенного. Я сделал, brew reinstall python3и это сработало.

mylittleswift
источник
0

Пытаться:

python3 -m pip install oscrypto

Работал на меня!

Абдул Рахман
источник
0

Чтобы следовать ответам, упомянутым выше, хотел связать файл libssl.dylib, но не нашел такого места, как показано ниже:

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

Однако как принятый ответ @bixel нашел файл в расположении ниже

/usr/local/opt/openssl/lib

и это сработало для меня.

reaganRezvi
источник
0

Я встретил тот же вопрос , когда я использовал , ctypes.cdllчтобы открыть /usr/lib/libcrypto.dylibс Python 3.7. Однако dylibМОЖЕТ быть открыт сPython 2.7 .

Я установил последнюю версию opensslсbrew install , затем установил переменные окружения и создал ссылки так, как они предложили выше, НИЧЕГО хорошего не произошло.

После нескольких часов копания я нашел обходное решение.

Я нашел некоторые libcrypto.X.dylibв /usrследующем,

/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

Во-первых, вместо этого я использовал следующий /usr/lib.

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

Он мог быть загружен, но некоторые API отсутствовали,

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

Я создал ссылку для /usr/lib/libcrypto.X.dylibв моем пути сценария.

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

Затем добавьте путь к DYLD_FALLBACK_LIBRARY_PATH

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

Наконец-то это сработало.

Песня Би
источник