Dit houdt verband met de wijzigingen in de systeemintegriteitsbescherming (SIP) in El Capitan, die onder andere voorkomen dat DYLD_LIBRARY_PATH wordt overgenomen door voortgebrachte processen.
U kunt de cx_Oracle.so
. wijzigen bibliotheek om het daadwerkelijke pad naar de Oracle-clientbibliotheek te gebruiken in plaats van het gezochte pad dat niet meer werkt; zorg ervoor dat je ORACLE_HOME
. hebt nog steeds ingesteld om naar uw werkelijke directe klantlocatie te verwijzen, en houd er ook rekening mee dat het exacte pad gerapporteerd door ImportError
moet worden gebruikt - de 3071542110
waarde kan variëren afhankelijk van de versie/build van Instant Client die u hebt geïnstalleerd:
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
... maar dan kan die bibliotheek geen andere Oracle-versie vinden:
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
U moet dus ook die bibliotheek wijzigen, waar u zich misschien minder prettig bij voelt:
install_name_tool -change \
/ade/b/3071542110/oracle/ldap/lib/libnnz11.dylib \
$ORACLE_HOME/libnnz11.dylib \
$ORACLE_HOME/libclntsh.dylib.11.1
Afhankelijk van de exacte clientversie/build moet u het bestand mogelijk beschrijfbaar maken voordat u die opdracht uitvoert, met:
chmod 755 $ORACLE_HOME/libclntsh.dylib.11.1
Met die wijzigingen kan ik de cx_Oracle
. uitvoeren tests op El Capitan.
Meer over install_name_change
hier.
Het lijkt erop dat de 12c instant-client zo is gebouwd dat dit probleem wordt vermeden, dus upgraden naar die client wordt eenvoudiger dan het hacken van de 11g-bestanden.