Python menabrak pada MacOS 10.15 Beta (19A582a) dengan “/usr/lib/libcrypto.dylib”


47

Saya menjalankan proyek Django saya dengan macOS Catalina baru dan berjalan dengan baik.
Saya menginstal oh_my_zsh kemudian saya mencoba menjalankan proyek yang sama dengan crash dengan kesalahan berikut. Saya menghapus oh_my_zsh dan mencoba lagi tetapi tidak berhasil.

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.

Jika Anda berada di virtualenv: Bagi saya bekerja reset (lengkap) dari venv (menghapusnya dan membuatnya kembali dengan semua dependensi dll)
basti

Jawaban:


94

Saya baru saja menemukan masalah yang sama dan merasa sedikit tidak nyaman untuk secara manual menghubungkan berbagai hal di sekitar.

Saya bisa menyelesaikan masalah dengan sederhana

  1. Menginstal openssl melalui homebrew:
    brew install openssl
  2. Menunjuk ke perpustakaan dinamis dari openssl melalui DYLD_LIBRARY_PATH:
    export DYLD_LIBRARY_PATH=/usr/local/opt/openssl/lib:$DYLD_LIBRARY_PATH

Saya baru saja menambahkan baris itu ke .zshrc saya.

Sunting: Menurut pertanyaan ini , penggunaanDYLD_FALLBACK_LIBRARY_PATH mungkin lebih baik daripada DYLD_LIBRARY_PATH.

Sunting 2: Seperti yang disebutkan dalam komentar di bawah, ini mungkin jawaban yang diterima. Cukup instal ulang cryptographypaket.



Ini juga berfungsi untuk saya di baris perintah, namun tidak berhasil untuk skrip. Mungkinkah ada sesuatu yang hilang?
ErnestoE

2
Dapat mengkonfirmasi export DYLD_FALLBACK_LIBRARY_PATH=/usr/local/opt/openssl/libpekerjaan seperti yang Anda gambarkan. Terima kasih atas tipnya!
Luke Hoersten

1
Ini bagus untuk membuat semuanya bekerja tetapi tidak menyelesaikannya sepenuhnya. Saya memiliki beberapa pekerjaan crontab yang perlu menggunakan Python dan saya tidak ingin harus memastikan mereka semua memiliki pengaturan env ini. Saya suka solusi @ Andrei di bawah ini. Itu mengatur symlink ke apa pun ls openssl terbaru sehingga ketika itu ditingkatkan di masa depan link juga akan. stackoverflow.com/a/58596931/142318
Chris

1
Semua orang harus mencoba jawaban @tonyStarks di bawah sebelum yang ini, mungkin saja itu adalah pencopotan yang mudah dan instal ulang untuk Anda
Micheal C Wallas

38

Peringatan: Saya bukan ahli keamanan, dan solusi ini mengacaukan perpustakaan crypto!

Saya tidak berpikir masalah Anda berasal dari zsh atau oh-my-zsh. Tebakan terbaik saya: beberapa perpustakaan crypto yang diinstal dengan MacOS 10.15 tidak kompatibel dengan python3instalasi Homebrew .

Inilah yang memperbaiki masalah bagi saya

# 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

Situasi saya untuk konteks:

  • Baru-baru ini ditingkatkan ke MacOS 10.15
  • Saya menggunakan python / pip diinstal melalui homebrew: brew install python
  • pip3 gagal dengan SIGABRT

Header laporan kesalahan sistem:

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

Bagi saya itu sudah cukup menginstal ulang paket kriptografi Python.

pip uninstall cryptography
pip install cryptography

1
Ini berhasil untuk saya. Dalam kasus saya, ansible tidak dijalankan setelah memperbarui virtualenv ke versi terbaru.
hshan

1
Berhasil! Terima kasih! Bagi saya, itu pip uninstall cryptographybukan remove.
fzwo

Ini memperbaikinya bagi saya juga. Terima kasih!
andrewdcato

Ini bekerja dengan sempurna - terima kasih!
Sherm4n

Yap, ini berhasil. Terima kasih!
Steffen Funke

17

Saya lebih suka kombinasi jawaban @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

Dengan cara ini, setidaknya secara teori, ketika memperbarui openssl, dylibs akan selalu mengarah ke versi terbaru. /usr/local/opt/opensslsebenarnya adalah tautan ke /usr/local/Cellar/openssl/Cellar/openssl/1.0.2t(versi openssl diinstal oleh brew).

Alasan masalah ini sebenarnya dijelaskan oleh minuman:

openssl adalah tong-only, yang berarti tidak disinkronkan ke / usr / local, karena Apple telah menghentikan penggunaan OpenSSL demi TLS dan pustaka crypto sendiri.

Mencoba menjalankan brew link openssl:

Peringatan: Menolak untuk menautkan perangkat lunak yang disediakan macOS: openssl Jika Anda harus memiliki openssl terlebih dahulu dalam menjalankan PATH Anda: echo 'export PATH = "/ usr / local / opt / openssl / bin: $ PATH"' >> ~ / .bash_profile

Agar kompiler menemukan openssl, Anda mungkin perlu mengatur: export LDFLAGS = "- L / usr / local / opt / openssl / lib" export CPPFLAGS = "- I / usr / local / opt / openssl / include"

Untuk pkg-config untuk menemukan openssl Anda mungkin perlu mengatur: export PKG_CONFIG_PATH = "/ usr / local / opt / openssl / lib / pkgconfig"

Jadi, pada dasarnya Anda perlu menautkannya secara manual.


15

r.xuan dari utas Apple Dev ini mengidentifikasi langkah-langkah pemecahan masalah Invalid dylib load. Clients should not load the unversioned libcrypto dylib as it does not have a stable ABI. dengan mengganti libssl.dylibdan libcrypto.dylibmenautkannya /usr/local/libdengan tautan ke lib dari instalasi Homebrew untukopenssl .

Langkah-langkahnya adalah:

Dapatkan lib segar

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/

Cadangkan yang lama

4) cd /usr/local/lib

5) mv libssl.dylib libssl_bak.dylib

6) mv libcrypto.dylib libcrypto_bak.dylib

Buat tautan baru

7) sudo ln -s libssl.1.0.0.dylib libssl.dylib

8) sudo ln -s libcrypto.1.0.0.dylib libcrypto.dylib


Ini bekerja untuk saya di Catalina 10.15.4, tapi saya punya /usr/local/Cellar/openssl@1.1 dan menggunakan file yang setara. Menggunakan file x.1.0.0.dylib, pip3 masih macet.
Andrew Delos Reyes

4

Itu harus penggunaan beberapa dependensi seperti kriptografi

Larutan:

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

temukan baris ini; hapus, dan semuanya baik-baik saja

# from ._perf._big_num_ctypes import libcrypto

Ini masalah saya

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

Saya melihat masalah serupa dengan ansible. Pelakunya adalah asn1crypto, dan masalahnya sudah diperbaiki .

Solusi saya adalah menghapusnya secara manual dan menginstalnya kembali dengan pip:

  1. rm -r /usr/local/lib/python2.7/site-packages/asn1crypto*. Ini diizinkan pipuntuk bekerja tanpa masalah.
  2. pip install asn1crypto, yang dipasang 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

CATATAN : Anda dapat memeriksa apakah asn1cryptopenyebabnya dengan menjalankan pythondalam mode verbose, misalnya python -v $(which ansible). Dalam kasus saya macet saat melakukan beberapa asn1cryptoimpor terkait:

# /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)

Terkait: https://github.com/Homebrew/homebrew-core/issues/44996


Ini yang bekerja untuk saya. Saya menggunakan terali dengan akar, yang menggunakan ansible. Saya melakukan rm -rperintah sebagaimana tercantum dalam jawaban, kemudian saya menghapus lingkungan python saya di trellis/.trellis/virtualenvdirektori, kemudian menggunakan trellis-cli yang saya lakukan trellis inityang menciptakan kembali lingkungan python dan menginstal dependensi dengan pip.
robrecord

Ini bekerja untuk saya :)
smartworld-dm

0

Jika Anda menggunakan Kevlar dari DevMate , tingkatkan ke 4.3.1, yang "Memperbaiki macOS Catalina crash yang disebabkan oleh versi libcrypto.dylib".


0

Sepertinya itu adalah masalah Homebrew. Saya lakukan brew reinstall python3dan itu berhasil.



0

Untuk mengikuti jawaban yang disebutkan di atas, ingin menautkan file libssl.dylib tetapi ditemukan tidak ada lokasi seperti di bawah ini:

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

Namun ketika jawaban yang diterima oleh @bixel menemukan file di lokasi di bawah ini

/usr/local/opt/openssl/lib

dan itu berhasil untuk saya.


0

Aku bertemu masalah yang sama ketika saya menggunakan ctypes.cdlluntuk membuka /usr/lib/libcrypto.dylibdengan Python 3.7. Namun dylibBISA dibuka denganPython 2.7 .

Saya menginstal yang terbaru openssldenganbrew install , kemudian mengatur variabel lingkungan dan membuat tautan seperti apa yang mereka sarankan di atas, TIDAK ADA yang baik terjadi.

Setelah menggali beberapa jam, saya menemukan solusi.

Saya menemukan beberapa libcrypto.X.dylibdi /usrsebagai berikut,

/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

Pertama, saya menggunakan yang diikuti untuk menggantikan itu /usr/libsebagai gantinya.

os.environ['DYLD_FALLBACK_LIBRARY_PATH'] = '/usr/local/opt/openssl/lib'

Itu bisa dimuat tetapi beberapa apis hilang,

AttributeError: dlsym(0x..., ECDH_OpenSSL): symbol not found

Saya membuat tautan untuk /usr/lib/libcrypto.X.dylibdi jalur skrip saya.

ln -s /usr/lib/libcrypto.X.dylib lib/libcrypto.dylib

Kemudian tambahkan path ke DYLD_FALLBACK_LIBRARY_PATH

os.environ['DYLD_FALLBACK_LIBRARY_PATH'] = 'lib' # It should be a absolute path

Akhirnya berhasil.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.