web-dev-qa-db-ja.com

Python MacOS 10.15 Beta(19A582a)で「/usr/lib/libcrypto.dylib」を使用するとクラッシュする

私は自分の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.

46
Faisal Manzer

私は同じ問題に遭遇し、手動でリンクするのが少し不快に感じました。

簡単に問題を解決できました

  1. Homesrew経由で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の方が適している場合があります。

82
bixel

注意:私はセキュリティの専門家ではありません。このソリューションは暗号ライブラリを混乱させます!

あなたの問題は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を使用します:brew install python
  • pip3SIGABRTで失敗していました

システムエラーレポートのヘッダー:

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

私にとっては、Pythonの暗号化パッケージを再インストールするだけで十分でした。

pip uninstall cryptography
pip install cryptography
19
Tony Stark

@ 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はkegのみです。つまり、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

これからのr.xuan Apple Dev thread は、エラーの回避策のステップを特定しました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によるopensslのインストールからのlibsへのリンク。

手順は次のとおりです。

新しいライブラリを取得

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

13
JuroOravec

cryptographyのようないくつかの依存関係の使用である必要があります

解決:

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

この行を見つけます。それを削除し、すべてがOKです

# 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.
3
twocucao

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
_

[〜#〜]注[〜#〜]pythonを実行すると、_asn1crypto_が原因かどうかを確認できます冗長モードで、例えば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

3
memoselyk

DevMate からKevlarを使用している場合は、「libcrypto.dylibのバージョンによって引き起こされるmacOS Catalinaのクラッシュを修正」した4.3.1にアップグレードします。

0
Winter

上記の回答に従うために、libssl.dylibファイルをリンクしたかったが、以下のような場所は見つかりませんでした:

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

ただし、@ bixelによる承認済みの回答により、以下の場所にファイルが見つかりました

/usr/local/opt/openssl/lib

そしてそれは私のために働いた。

0
reaganRezvi

ctypes.cdll/usr/lib/libcrypto.dylibで開くためにPython 3.7を使用していたときにも同じ問題が発生しました。ただし、dylibPython 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

とうとう動いた。

0
Song Bi

試してください:

python3 -m pip install oscrypto

私のために働いた!

0
Abdul Rahman

Homebrewの問題のようです。やった brew reinstall python3そしてそれは働いた。

0
mylittleswift