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


47

새로운 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.

당신이 virtualenv에 있다면 : 저를 위해 venv의 (완전한) 재설정을 수행했습니다 (삭제하고 모든 종속성으로 다시 작성하는 등)
basti

답변:


94

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

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

  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패키지를 다시 설치하기 만하면 됩니다.


19
시스템을 엉망으로하지 않기위한
공감

이것은 또한 명령 줄에서 나에게 도움이되었지만 스크립트에서는 작동하지 않았습니다. 빠진 것이 있습니까?
ErnestoE

2
export DYLD_FALLBACK_LIBRARY_PATH=/usr/local/opt/openssl/lib설명대로 작업을 확인할 수 있습니다. 팁 고마워!
Luke Hoersten

1
이것은 작동하는 데 유용하지만 완전히 해결하지는 못합니다. 파이썬을 사용해야하는 crontab 작업이 있으며 모두 env 설정이되어 있는지 확인하고 싶지 않습니다. 나는 아래의 @Andrei 솔루션을 좋아합니다. 최신 openssl 라이브러리에 대한 심볼릭 링크를 설정하여 향후 업그레이드 될 때도 링크가되도록합니다. stackoverflow.com/a/58596931/142318
Chris

1
모든 사람이 아래에 @tonyStarks 대답을 시도해야,이 하나 전에 아래로, 그것은 쉽게 제거하고 다시 설치 할 수 있습니다
Micheal C Wallas

38

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

귀하의 문제가 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.

29

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

pip uninstall cryptography
pip install cryptography

1
그것은 나를 위해 일했다. 필자의 경우 virtualenv를 최신 버전으로 업데이트 한 후 ansible이 실행되지 않았습니다.
hshan

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

최소한 이론적으로는 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"

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


15

이 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


이것은 Catalina 10.15.4에서 저에게 효과적이지만 /usr/local/Cellar/openssl@1.1이 있고 동등한 파일을 사용했습니다. x.1.0.0.dylib 파일을 사용하면 pip3이 여전히 충돌했습니다.
Andrew Delos Reyes

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


이것은 나를 위해 일한 것입니다. 나는 뿌리로 격자를 사용하고 있었는데, 이것은 ansible을 사용합니다. 내가 한 rm -r대답에 나열된 명령을, 그때에 내 파이썬 환경을 제거 trellis/.trellis/virtualenv후 내가 한 트 렐리 스 CLI를 사용하여 디렉토리 trellis init파이썬 환경과 핍과 설치 종속성을 재현.
robrecord

이것은 나를 위해 일했다 :)
smartworld-dm

0

DevMate 에서 Kevlar를 사용 하는 경우 "libcrypto.dylib 버전으로 인한 macOS Catalina 충돌 수정"인 4.3.1로 업그레이드하십시오.


0

Homebrew 문제인 것 같습니다. 나는 그것을 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.

나는 최신을 설치 opensslbrew 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

마침내 효과가있었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.