Това е свързано с промените в защитата на целостта на системата (SIP) в El Capitan, което наред с други неща предотвратява наследяването на DYLD_LIBRARY_PATH от създадените процеси.
Можете да модифицирате cx_Oracle.so
библиотека, за да използва действителния път към клиентската библиотека на Oracle вместо търсения път, който вече не работи; уверете се, че имате ORACLE_HOME
все още е настроен да сочи към действителното ви моментално местоположение на клиента и също така имайте предвид, че точният път, докладван от ImportError
трябва да се използва - 3071542110
стойността може да варира в зависимост от версията/версията на Instant Client, която сте инсталирали:
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
... но тогава тази библиотека не може да намери друга Oracle:
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
Така че ще трябва да промените и тази библиотека, която може да ви е по-малко удобна:
install_name_tool -change \
/ade/b/3071542110/oracle/ldap/lib/libnnz11.dylib \
$ORACLE_HOME/libnnz11.dylib \
$ORACLE_HOME/libclntsh.dylib.11.1
В зависимост от точната версия/комплект на клиента може да се наложи да направите файла за запис, преди да изпълните тази команда, с:
chmod 755 $ORACLE_HOME/libclntsh.dylib.11.1
С тези промени мога да стартирам cx_Oracle
тестове на El Capitan.
Повече за install_name_change
тук.
Изглежда, че мигновеният клиент 12c е създаден по начин, който избягва този проблем, така че надграждането до него ще бъде по-лесно от хакването на 11g файлове.