Jest to związane ze zmianami ochrony integralności systemu (SIP) w El Capitan, które między innymi zapobiegają dziedziczeniu DYLD_LIBRARY_PATH przez powstające procesy.
Możesz zmodyfikować cx_Oracle.so
biblioteka do korzystania z rzeczywistej ścieżki do biblioteki klienta Oracle zamiast przeszukiwanej ścieżki, która już nie działa; upewnij się, że masz ORACLE_HOME
nadal ustawiony tak, aby wskazywał na Twoją rzeczywistą lokalizację klienta błyskawicznego, a także zauważ, że dokładna ścieżka zgłaszana przez ImportError
należy użyć - 3071542110
wartość może się różnić w zależności od wersji/kompilacji zainstalowanego klienta błyskawicznego:
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
... ale wtedy ta biblioteka nie może znaleźć innej 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
Musisz więc zmienić także tę bibliotekę, co może być mniej wygodne:
install_name_tool -change \
/ade/b/3071542110/oracle/ldap/lib/libnnz11.dylib \
$ORACLE_HOME/libnnz11.dylib \
$ORACLE_HOME/libclntsh.dylib.11.1
W zależności od dokładnej wersji/kompilacji klienta może być konieczne, aby plik był zapisywalny przed uruchomieniem tego polecenia, za pomocą:
chmod 755 $ORACLE_HOME/libclntsh.dylib.11.1
Dzięki tym zmianom mogę uruchomić cx_Oracle
testy na El Capitan.
Więcej na temat install_name_change
tutaj.
Wygląda na to, że klient natychmiastowy 12c został zbudowany w sposób, który pozwala uniknąć tego problemu, więc uaktualnienie do tego będzie prostsze niż hakowanie plików 11g.