在MacOS 10.15 Beta (19A582a)上,Python因"/usr/lib/libcrypto.dylib"而崩溃。

67

我在新的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
如果你正在使用 virtualenv:对我来说有效的方法是(完全)重置 venv(删除它并重新创建带有所有依赖项等)。 - basti
14个回答

0
如果您正在使用来自DevMate的Kevlar,请升级到4.3.1版本,该版本“修复了由libcrypto.dylib版本引起的macOS Catalina崩溃”。

0

看起来是Homebrew的问题。我运行了brew reinstall python3,然后就好了。


0

使用以下步骤解决问题:

  • brew update && brew upgrade && brew reinstall openssl
  • cd /usr/local/Cellar/openssl@1.1/1.1.1g/lib
  • sudo cp libssl.1.1.1.dylib libcrypto.1.1.1.dylib /usr/local/lib/
  • sudo ln -s libssl.1.0.0.dylib libssl.dylib
  • sudo ln -s libcrypto.1.0.0.dylib libcrypto.dylib`

0

当我使用ctypes.cdll打开/usr/lib/libcrypto.dylib时,我遇到了与Python 3.7相关的问题。然而,dylib可以在Python 2.7中打开。

我使用brew install安装了最新的openssl,然后按照上面建议的设置环境变量和创建链接,但什么好处都没有。

经过几个小时的挖掘,我找到了一个解决方法。

我在/usr中找到了一些libcrypto.X.dylib,如下所示:

/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

终于,它成功了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接