Detta är relaterat till systemintegritetsskyddsförändringarna (SIP) i El Capitan, som bland annat förhindrar att DYLD_LIBRARY_PATH ärvs av skapade processer.
Du kan ändra cx_Oracle.so
biblioteket för att använda den faktiska sökvägen till Oracle-klientbiblioteket istället för den sökta sökvägen som inte längre fungerar; se till att du har ORACLE_HOME
fortfarande inställd på att peka på din faktiska omedelbara klientplats, och notera även att den exakta sökvägen som rapporteras av ImportError
bör användas - 3071542110
värdet kan variera beroende på vilken version/konstruktion av Instant Client du har installerat:
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
... men då kan det biblioteket inte hitta en annan 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
Så du skulle behöva ändra det biblioteket också, vilket du kanske är mindre bekväm med:
install_name_tool -change \
/ade/b/3071542110/oracle/ldap/lib/libnnz11.dylib \
$ORACLE_HOME/libnnz11.dylib \
$ORACLE_HOME/libclntsh.dylib.11.1
Beroende på den exakta klientversionen/byggen kan du behöva göra filen skrivbar innan du kör det kommandot, med:
chmod 755 $ORACLE_HOME/libclntsh.dylib.11.1
Med dessa ändringar kan jag köra cx_Oracle
tester på El Capitan.
Mer om install_name_change
här.
Det ser ut som att 12c-instant-klienten har byggts på ett sätt som undviker det här problemet, så att uppgradera till det blir enklare än att hacka sig in i 11g-filer.