Python หยุดทำงานบน MacOS 10.15 Beta (19A582a) ด้วย“ /usr/lib/libcrypto.dylib”


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 A: สำหรับผมทำงาน (ฉบับสมบูรณ์) รีเซ็ต venv (การลบและการสร้างกับทุกอ้างอิง ฯลฯ )
Basti

คำตอบ:


94

ฉันเพิ่งเจอปัญหาเดียวกันและรู้สึกอึดอัดเล็กน้อยที่จะเชื่อมโยงสิ่งต่าง ๆ ด้วยตนเอง

ฉันสามารถแก้ไขปัญหาได้อย่างง่ายดาย

  1. การติดตั้ง openssl ผ่าน homebrew:
    brew install openssl
  2. ชี้ไปที่ไลบรารีแบบไดนามิกจาก openssl ผ่าน DYLD_LIBRARY_PATH:
    export DYLD_LIBRARY_PATH=/usr/local/opt/openssl/lib:$DYLD_LIBRARY_PATH

ฉันเพิ่งเพิ่มบรรทัดนั้นลงใน. zshrc ของฉัน

แก้ไข: ตามคำถามนี้การใช้งานของอาจจะมากกว่าที่นิยมDYLD_FALLBACK_LIBRARY_PATHDYLD_LIBRARY_PATH

แก้ไข 2: ดังที่กล่าวไว้ในความคิดเห็นด้านล่างนี่อาจเป็นคำตอบที่ยอมรับได้ เพียงติดตั้งcryptographyแพ็คเกจใหม่



สิ่งนี้ใช้ได้กับฉันในบรรทัดคำสั่งด้วย แต่มันก็ไม่ได้ผลกับสคริปต์ มีบางสิ่งที่ขาดหายไปหรือไม่?
ErnestoE

2
สามารถยืนยันexport DYLD_FALLBACK_LIBRARY_PATH=/usr/local/opt/openssl/libงานตามที่คุณอธิบายได้ ขอบคุณสำหรับทิป!
Luke Hoersten

1
นี่เป็นสิ่งที่ยอดเยี่ยมสำหรับการทำให้สิ่งต่าง ๆ ทำงาน แต่ไม่ได้แก้ปัญหาทั้งหมด ฉันมีงาน crontab ที่ต้องใช้ Python และฉันไม่ต้องการให้แน่ใจว่าพวกเขาทั้งหมดมีการตั้งค่า env นี้ ฉันชอบโซลูชันของ @ Andrei ด้านล่าง มันตั้ง symlink ให้กับ libs openssl ล่าสุดไม่ว่าจะเป็นอะไรก็ตามเมื่อมันถูกอัพเกรดในอนาคตลิงก์ก็จะเป็นเช่นกัน stackoverflow.com/a/58596931/142318
Chris

1
ทุกคนควรลอง @tonyStarks ตอบด้านล่างก่อนหน้านี้อาจเป็นเพียงการถอนการติดตั้งและติดตั้งใหม่ให้กับคุณ
Micheal C Wallas

38

Caveat: ฉันไม่ใช่ผู้เชี่ยวชาญด้านความปลอดภัยและวิธีนี้ยุ่งกับห้องสมุด crypto!

ฉันไม่คิดว่าปัญหาของคุณเกิดจาก zsh หรือ oh-my-zsh การเดาที่ดีที่สุดของฉัน: ห้องสมุด crypto บางแห่งที่ติดตั้งกับ MacOS 10.15 ไม่สามารถใช้งานร่วมกับการpython3ติดตั้งของ Homebrew

นี่คือสิ่งที่แก้ไขปัญหาสำหรับฉัน

# 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
  • ฉันใช้หลาม / pip ที่ติดตั้งผ่าน homebrew: 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
มันใช้งานได้สำหรับฉัน ในกรณีของฉัน ansible ไม่ได้ถูกดำเนินการหลังจากการปรับปรุง virtualenv เป็นรุ่นล่าสุด
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 dylibs จะชี้ไปที่เวอร์ชันล่าสุดเสมอ /usr/local/opt/opensslเป็นลิงก์ไปยัง/usr/local/Cellar/openssl/Cellar/openssl/1.0.2t (เวอร์ชันของ openssl ที่ติดตั้งโดยชง)

เหตุผลที่ทำให้เกิดปัญหาเกิดขึ้นจริง ๆ แล้วอธิบายโดยก่อ:

openssl เป็น keg-only เท่านั้นซึ่งหมายความว่ามันไม่ได้เชื่อมโยงกับ / usr / local เนื่องจาก Apple ได้เลิกใช้ OpenSSL เพื่อสนับสนุนไลบรารี TLS และ crypto ของตัวเอง

พยายามเรียกใช้brew link openssl:

คำเตือน: ปฏิเสธที่จะเชื่อมโยงซอฟต์แวร์ที่มีให้ใน MacOS: openssl หากคุณจำเป็นต้องมี openssl ก่อนในการรัน PATH ของคุณ: 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 จากนี้ด้ายแอปเปิ้ล Devระบุขั้นตอนของวิธีแก้ปัญหาสำหรับข้อผิดพลาดที่ 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 จาก 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


สิ่งนี้ใช้ได้กับฉันใน Catalina 10.15.4 แต่ฉันมี /usr/local/Cellar/openssl@1.1 และใช้ไฟล์ที่เทียบเท่า การใช้ไฟล์ x.1.0.0.dylib, pip3 ยังคงล้มเหลว
Andrew Delos Reyes

4

จะต้องมีการใช้การอ้างอิงบางอย่างเช่นการเข้ารหัส

สารละลาย:

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

ค้นหาบรรทัดนี้ ลบทิ้งและทุกอย่างก็โอเค

# 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ในโหมด verbose 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


นี่คือสิ่งที่เหมาะกับฉัน ฉันใช้โครงตาข่ายโดยใช้รากซึ่งใช้ตัวเชื่อมต่อ ฉันทำrm -rคำสั่งตามที่ระบุในคำตอบจากนั้นฉันก็ลบสภาพแวดล้อมของหลามที่trellis/.trellis/virtualenvไดเรกทอรีจากนั้นใช้ trellis-cli trellis initซึ่งฉันได้ สร้างสภาพแวดล้อมของงูหลามขึ้นมาใหม่และติดตั้งการพึ่งพากับ pip
robrecord

สิ่งนี้ใช้ได้กับฉัน :)
smartworld-dm




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แต่อาจจะเปิดด้วยdylibPython 2.7

ฉันติดตั้งล่าสุดopensslด้วยbrew 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'

สามารถโหลดได้ แต่ apis บางตัวหายไป

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.