[python] “/usr/lib/libcrypto.dylib”를 사용하여 MacOS 10.15 베타 (19A582a)에서 Python 충돌

새로운 macOS Catalina로 Django 프로젝트를 실행했으며 정상적으로 실행되었습니다.
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.



답변

방금 동일한 문제가 발생하여 수동으로 주변을 연결하는 것이 약간 불편하다고 느꼈습니다.

나는 간단하게 문제를 해결할 수 있었다

  1. homebrew를 통한 openssl 설치 :
    brew install openssl
  2. DYLD_LIBRARY_PATH를 통해 openssl에서 동적 라이브러리를 가리키는 경우 :
    export DYLD_LIBRARY_PATH=/usr/local/opt/openssl/lib:$DYLD_LIBRARY_PATH

방금 해당 줄을 내 .zshrc에 추가했습니다.

편집 : 이 질문 에 따르면 의 사용법이보다 DYLD_FALLBACK_LIBRARY_PATH좋습니다 DYLD_LIBRARY_PATH.

편집 2 : 아래 의견에서 언급했듯이 이것은 아마도 대답 될 것입니다. cryptography패키지를 다시 설치하기 만하면 됩니다.


답변

경고 : 나는 보안 전문가가 아니며이 솔루션은 암호화 라이브러리를 엉망으로 만듭니다!

귀하의 문제가 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로 업그레이드
  • homebrew를 통해 설치된 python / pip를 사용합니다. 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.


답변

나를 위해 파이썬의 암호화 패키지를 다시 설치하는 것으로 충분했습니다.

pip uninstall cryptography
pip install cryptography


답변

@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을 업데이트 할 때 dylib는 항상 최신 버전을 가리 킵니다. /usr/local/opt/openssl실제로는 /usr/local/Cellar/openssl/Cellar/openssl/1.0.2t(brew가 설치 한 openssl의 버전)에 대한 링크 입니다.

이 문제가 발생하는 이유는 실제로 brew에 의해 설명됩니다.

openssl은 통 전용이며, 이는 Apple이 자체 TLS 및 암호화 라이브러리를 위해 OpenSSL을 더 이상 사용하지 않기 때문에 / usr / local로 심볼릭 링크되지 않았 음을 의미합니다.

실행하려고 brew link openssl:

경고 : macOS 제공 소프트웨어 연결 거부 : openssl PATH에서 먼저 openssl이 필요한 경우 : 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”

따라서 기본적으로 수동으로 연결해야합니다.


답변

이 Apple Dev 스레드의 r.xuan은 및 Homelink 설치에서 libs에 대한 링크로 및 링크를 Invalid dylib load. Clients should not load the unversioned libcrypto dylib as it does not have a stable ABI.
대체하여 오류 에 대한 임시 해결책 단계를 식별했습니다
.libssl.dyliblibcrypto.dylib/usr/local/libopenssl

단계는 다음과 같습니다.

신선한 라이브러리 얻기

1) brew update && brew upgrade && brew install openssl

2) cd /usr/local/Cellar/openssl/1.0.2t/lib

삼) 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


답변

암호화 와 같은 일부 종속성을 사용해야합니다.

해결책:

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.


답변

와 비슷한 문제가 발생했습니다 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실행하면 범인이 있는지 확인할 수 있습니다 . 필자의 경우 관련 가져 오기 를 수행하는 동안 충돌이 발생했습니다 .pythonpython -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