Điều này liên quan đến các thay đổi về bảo vệ toàn vẹn hệ thống (SIP) trong El Capitan, trong số những thứ khác ngăn cản DYLD_LIBRARY_PATH kế thừa bởi các quy trình đã tạo.
Bạn có thể sửa đổi cx_Oracle.so
thư viện để sử dụng đường dẫn thực tế đến thư viện máy khách Oracle thay vì đường dẫn đã tìm kiếm không còn hoạt động; đảm bảo rằng bạn có ORACLE_HOME
vẫn được đặt để trỏ đến vị trí ứng dụng khách tức thì thực tế của bạn và cũng lưu ý rằng đường dẫn chính xác được báo cáo bởi ImportError
nên được sử dụng - 3071542110
giá trị có thể thay đổi tùy thuộc vào phiên bản / bản dựng của Ứng dụng khách tức thì mà bạn đã cài đặt:
export ORACLE_HOME=/usr/local/lib/share/oracle/installclient_11_2
install_name_tool -change \
/ade/b/3071542110/oracle/rdbms/lib/libclntsh.dylib.11.1 \
$ORACLE_HOME/libclntsh.dylib.11.1 \
/Library/Python/2.7/site-packages/cx_Oracle.so
... nhưng sau đó thư viện đó không thể tìm thấy một Oracle khác:
ImportError: dlopen(/Library/Python/2.7/site-packages/cx_Oracle.so, 2): Library not loaded: /ade/b/3071542110/oracle/ldap/lib/libnnz11.dylib
Referenced from: /usr/local/lib/share/oracle/installclient_11_2/libclntsh.dylib.11.1
Reason: image not found
Vì vậy, bạn cũng cần phải thay đổi thư viện đó, mà bạn có thể không thoải mái với:
install_name_tool -change \
/ade/b/3071542110/oracle/ldap/lib/libnnz11.dylib \
$ORACLE_HOME/libnnz11.dylib \
$ORACLE_HOME/libclntsh.dylib.11.1
Tùy thuộc vào phiên bản / phiên bản ứng dụng khách chính xác, bạn có thể cần làm cho tệp có thể ghi trước khi chạy lệnh đó, với:
chmod 755 $ORACLE_HOME/libclntsh.dylib.11.1
Với những thay đổi đó, tôi có thể chạy cx_Oracle
kiểm tra trên El Capitan.
Tìm hiểu thêm về install_name_change
tại đây.
Có vẻ như ứng dụng khách tức thời 12c đã được xây dựng theo cách để tránh vấn đề này, vì vậy việc nâng cấp lên ứng dụng đó sẽ đơn giản hơn so với việc hack xung quanh tệp int he 11g.