Python bị sập trên MacOS 10.15 Beta (19A582a) với /


47

Tôi đã chạy dự án Django với macOS Catalina mới và đang chạy tốt.
Tôi đã cài đặt oh_my_zsh sau đó tôi đã cố gắng chạy cùng một dự án, nó bị lỗi với các lỗi sau. Tôi đã gỡ cài đặt oh_my_zsh và thử lại nhưng không được.

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.

Nếu bạn đang ở trong một virtualenv: Đối với tôi làm việc một (đầy đủ) reset của venv (xóa nó và tái tạo nó với tất cả phụ thuộc, vv)
Basti

Câu trả lời:


94

Tôi vừa gặp vấn đề tương tự và cảm thấy hơi khó chịu khi tự liên kết mọi thứ xung quanh.

Tôi đã có thể giải quyết vấn đề bằng cách đơn giản

  1. Cài đặt openssl qua homebrew:
    brew install openssl
  2. Chỉ về phía các thư viện động từ openssl thông qua DYLD_LIBRARY_PATH:
    export DYLD_LIBRARY_PATH=/usr/local/opt/openssl/lib:$DYLD_LIBRARY_PATH

Tôi vừa thêm dòng đó vào .zshrc của tôi.

Chỉnh sửa: Theo câu hỏi này , việc sử dụng DYLD_FALLBACK_LIBRARY_PATHcó thể thích hợp hơn DYLD_LIBRARY_PATH.

Chỉnh sửa 2: Như đã đề cập trong một bình luận dưới đây, đây có lẽ nên là câu trả lời được chấp nhận. Đơn giản chỉ cần cài đặt lại cryptographygói.


19
upvote vì đã không làm rối hệ thống
Jingshao Chen

Điều này cũng làm việc cho tôi trong dòng lệnh, tuy nhiên nó không hoạt động đối với các tập lệnh. Có thể thiếu một cái gì đó?
ErnestoE

2
Có thể xác nhận export DYLD_FALLBACK_LIBRARY_PATH=/usr/local/opt/openssl/libhoạt động như bạn mô tả. Cảm ơn vì tiền hỗ trợ!
Luke Hoersten

1
Điều này là tuyệt vời để làm cho mọi thứ hoạt động nhưng không giải quyết nó hoàn toàn. Tôi có một số công việc crontab cần sử dụng Python và tôi không muốn phải đảm bảo tất cả chúng đều có thiết lập env này. Tôi thích giải pháp của @ Andrei's dưới đây. Nó thiết lập các liên kết tượng trưng cho bất cứ điều gì các lib mở rộng mới nhất để khi được nâng cấp trong tương lai, các liên kết cũng sẽ như vậy. stackoverflow.com/a/58596931/142318
Chris

1
Mọi người nên thử trả lời @tonyStarks bên dưới trước câu trả lời này, đây có thể là một cài đặt dễ dàng và cài đặt lại cho bạn
Micheal C Wallas

38

Hãy cẩn thận: Tôi không phải là một chuyên gia bảo mật và giải pháp này gây rối với các thư viện tiền điện tử!

Tôi không nghĩ vấn đề của bạn bắt nguồn từ zsh hoặc oh-my-zsh. Tôi đoán tốt nhất: một số thư viện tiền điện tử được cài đặt với MacOS 10.15 không tương thích với python3cài đặt của Homebrew .

Đây là những gì đã khắc phục vấn đề cho tôi

# 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

Tình hình của tôi cho bối cảnh:

  • Gần đây đã nâng cấp lên MacOS 10.15
  • Tôi sử dụng python / pip được cài đặt qua homebrew: brew install python
  • pip3 đã thất bại với SIGABRT

Tiêu đề báo cáo lỗi hệ thống:

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

Đối với tôi nó là đủ để cài đặt lại gói mật mã của Python.

pip uninstall cryptography
pip install cryptography

1
Nó làm việc cho tôi. Trong trường hợp của tôi, ansible đã không được thực thi sau khi cập nhật virtualenv lên phiên bản mới nhất.
h Sơn

1
Nó đã làm việc! Cảm ơn! Đối với tôi, nó đã pip uninstall cryptographythay vì remove.
fzwo

Điều này đã sửa nó cho tôi là tốt. Cảm ơn!
andrewdcato

Điều này đã làm việc hoàn hảo - cảm ơn!
Sherm4n

Đúng, điều này đã lừa Cảm ơn!
Steffen Funke

17

Tôi thích kết hợp các câu trả lời @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

Theo cách này, ít nhất là về mặt lý thuyết, khi cập nhật openssl, các dylib sẽ luôn hướng đến các phiên bản mới nhất. /usr/local/opt/opensslthực sự là một liên kết đến /usr/local/Cellar/openssl/Cellar/openssl/1.0.2t(phiên bản openssl được cài đặt bởi brew).

Lý do vấn đề xảy ra thực sự được giải thích bởi brew:

openssl chỉ là keg, có nghĩa là nó không được liên kết thành / usr / local, vì Apple đã không chấp nhận sử dụng OpenSSL để ủng hộ các thư viện TLS và tiền điện tử của riêng mình.

Đang cố gắng để chạy brew link openssl:

Cảnh báo: Từ chối liên kết phần mềm do macOS cung cấp: openssl Nếu trước tiên bạn cần phải có openssl trong lần chạy PATH của mình: echo 'export PATH = "/ usr / local / opt / openssl / bin: $ PATH"' >> ~ / .bash_profile

Để trình biên dịch tìm openssl, bạn có thể cần phải đặt: export LDFLAGS = "- L / usr / local / opt / openssl / lib" export CPPFLAGS = "- I / usr / local / opt / openssl / include"

Để pkg-config tìm thấy openssl, bạn có thể cần phải đặt: export PKG_CONFIG_PATH = "/ usr / local / opt / openssl / lib / pkgconfig"

Vì vậy, về cơ bản bạn cần liên kết chúng bằng tay.


15

r.xuan từ luồng Apple Dev này đã xác định các bước khắc phục lỗi Invalid dylib load. Clients should not load the unversioned libcrypto dylib as it does not have a stable ABI. bằng cách thay thế libssl.dyliblibcrypto.dylibliên kết /usr/local/libbằng các liên kết đến lib từ cài đặt của Homebrew openssl.

Các bước là:

Nhận libs mới

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/

Sao lưu những cái cũ

4) cd /usr/local/lib

5) mv libssl.dylib libssl_bak.dylib

6) mv libcrypto.dylib libcrypto_bak.dylib

Tạo liên kết mới

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

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


Điều này làm việc cho tôi trên Catalina 10.15.4, nhưng tôi đã có /usr/local/Cellar/openssl@1.1 và sử dụng các tệp tương đương. Sử dụng các tệp x.1.0.0.dylib, pip3 vẫn bị lỗi.
Andrew Delos Reyes

4

Nó phải được sử dụng một số phụ thuộc như mật mã

Giải pháp:

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

tìm dòng này; xóa nó đi, và mọi thứ đều ổn

# from ._perf._big_num_ctypes import libcrypto

Đây là vấn đề của tôi

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

Tôi đã nhìn thấy vấn đề tương tự với ansible. Thủ phạm là asn1crypto, và vấn đề đã được khắc phục .

Giải pháp của tôi là tự gỡ bỏ nó và cài đặt lại với pip:

  1. rm -r /usr/local/lib/python2.7/site-packages/asn1crypto*. Điều này cho phép piplàm việc mà không có vấn đề.
  2. pip install asn1crypto, đã cài đặt 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

LƯU Ý : Bạn có thể kiểm tra xem có phải asn1cryptolà thủ phạm hay không bằng cách chạy pythontrong chế độ dài dòng, vd python -v $(which ansible). Trong trường hợp của tôi, nó bị hỏng trong khi thực hiện một số asn1cryptonhập khẩu liên quan:

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

Liên quan: https://github.com/Homebrew/homebrew-core/issues/44996


Đây là một trong những làm việc cho tôi. Tôi đã sử dụng trellis bằng rễ, trong đó sử dụng ansible. Tôi đã thực hiện rm -rlệnh như được liệt kê trong câu trả lời, sau đó tôi loại bỏ môi trường python của mình tại trellis/.trellis/virtualenvthư mục, sau đó sử dụng trellis-cli tôi đã trellis inittạo lại một môi trường python và cài đặt các phụ thuộc với pip.
robrecord

Điều này làm việc cho tôi :)
smartworld-dm

0

Nếu bạn đang sử dụng Kevlar từ DevMate , hãy nâng cấp lên 4.3.1, trong đó "Đã sửa lỗi macOS Catalina do phiên bản libcrypto.dylib gây ra".


0

Có vẻ như đó là một vấn đề Homebrew. Tôi đã làm brew reinstall python3và nó đã làm việc.



0

Để làm theo các câu trả lời được đề cập ở trên, muốn liên kết tệp libssl.dylib nhưng tìm thấy không có vị trí như dưới đây:

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

Tuy nhiên, vì câu trả lời được chấp nhận bởi @bixel đã tìm thấy tệp ở vị trí bên dưới

/usr/local/opt/openssl/lib

và nó đã làm việc cho tôi.


0

Tôi đã gặp vấn đề tương tự khi tôi đã sử dụng ctypes.cdllđể mở /usr/lib/libcrypto.dylibvới Python 3.7. Tuy nhiên, dylibCOULD được mở bằngPython 2.7 .

Tôi đã cài đặt mới nhất opensslvới brew install, sau đó đặt các biến môi trường và tạo các liên kết như những gì họ đề xuất ở trên, việc KHÔNG CÓ đã xảy ra.

Sau vài giờ đào, tôi tìm thấy một giải pháp khắc phục.

Tôi tìm thấy một số libcrypto.X.dylibtrong /usrnhư sau,

/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

Đầu tiên, tôi đã sử dụng cái tiếp theo để thay thế nó /usr/lib.

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

Nó có thể được tải nhưng một số apis đã bị mất,

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

Tôi đã tạo một liên kết cho /usr/lib/libcrypto.X.dylibtrong đường dẫn kịch bản của tôi.

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

Sau đó thêm đường dẫn đến DYLD_FALLBACK_LIBRARY_PATH

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

Cuối cùng, nó đã làm việc.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.