Збій 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 (видалення та відтворення його з усіма залежностями тощо)
basti

Відповіді:


94

Я просто зіткнувся з тією ж проблемою і мені стало незручно вручну пов’язувати речі.

Я зміг вирішити проблему просто

  1. Встановлення openssl через домашню мову:
    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пакет.


19
Висновок за те, що не зіпсувати систему
Jingshao Chen

Це також працювало для мене в командному рядку, проте це не працювало для скриптів. Може щось не вистачає?
ErnestoE

2
Може підтвердити export DYLD_FALLBACK_LIBRARY_PATH=/usr/local/opt/openssl/libроботи, як ви описали. Дякую за пораду!
Люк Хорстен

1
Це відмінно підходить для роботи, але не вирішує її повністю. У мене є декілька завдань crontab, для яких потрібно використовувати Python, і я не хочу переконатися, що всі вони мають цю налаштування env. Мені подобається рішення @ Андрія нижче. Він налаштовує символьні посилання на будь-які останні версії opensl, щоб, коли оновлено в майбутньому, посилання також будуть. stackoverflow.com/a/58596931/142318
Кріс

1
Кожен повинен спробувати відповідь @tonyStarks нижче, перш ніж цей, можливо, це буде простою видаленням та перевстановленням для вас
Micheal C Wallas

38

Caveat: Я не фахівець з безпеки, і це рішення псується з криптовалютами!

Я не думаю, що ваше питання походить від 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.

29

Для мене було достатньо перевстановити пакет криптографії Python.

pip uninstall cryptography
pip install cryptography

1
Це працювало для мене. У моєму випадку ansible не виконувався після оновлення virtualenv до останньої версії.
хшань

1
Це спрацювало! Дякую! Для мене це було pip uninstall cryptographyзамість remove.
fzwo

Це виправило і для мене. Дякую!
andrewdcato

Це спрацювало чудово - дякую!
Sherm4n

Так, це зробило трюк. Дякую!
Steffen Funke

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

Таким чином, принаймні теоретично, при оновленні opensl диліби завжди вказуватимуть на останні версії. /usr/local/opt/opensslнасправді є посиланням на /usr/local/Cellar/openssl/Cellar/openssl/1.0.2t(версія openssl, встановлена ​​brew).

Причина виникнення проблеми насправді пояснюється пивом:

openssl є лише кегом, що означає, що він не був пов'язаний з / 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"

Отже, в основному їх потрібно пов’язати вручну.


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посилання на libs з установки 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


Це працювало для мене на 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.

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/isissue/44996


Це той, який працював на мене. Я використовував коріння корінням, яке використовує анзіб. Я зробив rm -rкоманду, як зазначено у відповіді, потім я видалив своє середовище python у trellis/.trellis/virtualenvкаталозі, потім за допомогою треліс-клі я зробив, trellis initщо відтворив середовище python та встановив залежності від pip.
robrecord

Це працювало для мене :)
smartworld-dm

0

Якщо ви використовуєте Kevlar від DevMate , перейдіть до версії 4.3.1, яка "Виправлена ​​помилка катастрофи macOS Catalina, викликана версією libcrypto.dylib".


0

Схоже, це було питання про домашню мову. Я так brew reinstall python3і працював.



0

Щоб відповідати згаданим вище відповідям, хотіли зв’язати файл libssl.dylib, але не знайдено такого місця, як показано нижче:

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

Однак, як прийнята відповідь @bixel знайшла файл у нижньому місці

/usr/local/opt/openssl/lib

і це працювало на мене.


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'

Це може бути завантажено, але деякі апіси були відсутні,

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

Нарешті, це спрацювало.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.