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


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を使用している場合:私にとっては、envの(完全な)リセット(それを削除してすべての依存関係を含めて再作成するなど)を行いました
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
システムめちゃくちゃないためupvote
Jingshao陳

これはコマンドラインでも機能しましたが、スクリプトでは機能しませんでした。何か不足している可能性がありますか?
ErnestoE

2
export DYLD_FALLBACK_LIBRARY_PATH=/usr/local/opt/openssl/libあなたが説明したように作品を確認することができます。先端をありがとう!
Luke Hoersten、

1
これは物事を機能させるのに最適ですが、完全には解決しません。Pythonを使用する必要があるいくつかのcrontabジョブがあり、それらすべてにこのenvセットアップがあることを確認する必要はありません。以下の@Andreiのソリューションが好きです。最新のopenssl libsへのシンボリックリンクを設定して、将来アップグレードされるときにリンクも同様になるようにします。stackoverflow.com/a/58596931/142318
Chris

1
誰もが@tonyStarksはこの1つ前に、以下の答え試してみてください、それはあなたのために簡単にアンインストールして再インストールすることも
マイケル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

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

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はkegのみです。これは、/ usr / localにシンボリックリンクされなかったことを意味します。これは、Appleが独自のTLSおよび暗号ライブラリを優先してOpenSSLの使用を非推奨にしたためです。

実行しようとしています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

このアップルDevのスレッドからr.xuanは、エラーの回避策の手順を確認し 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へのリンクを持ちますopenssl

手順は次のとおりです。

新しいライブラリを入手する

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

この行を見つけます。それを削除し、すべてが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.

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


これは私のために働いたものです。私はansibleを使用するrootsでtrellisを使用していました。私はrm -r答えにリストされているようにコマンドを実行し、次にtrellis/.trellis/virtualenvディレクトリでPython環境を削除し、次にtrellis-cliを使用 trellis initしてPython環境を再作成し、pipで依存関係をインストールしました。
robrecord

これは私のために働きました:)
smartworld-dm

0

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


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.