Ceci est lié aux modifications de la protection de l'intégrité du système (SIP) dans El Capitan, qui, entre autres, empêche l'héritage de DYLD_LIBRARY_PATH par les processus générés.
Vous pouvez modifier le cx_Oracle.so
bibliothèque pour utiliser le chemin réel vers la bibliothèque client Oracle au lieu du chemin recherché qui ne fonctionne plus ; assurez-vous d'avoir ORACLE_HOME
toujours défini pour pointer vers l'emplacement réel de votre client instantané, et notez également que le chemin exact signalé par ImportError
doit être utilisé - le 3071542110
la valeur peut varier en fonction de la version/build d'Instant Client que vous avez installé :
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
... mais cette bibliothèque ne peut pas en trouver une autre 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
Vous devrez donc également modifier cette bibliothèque, ce avec quoi vous serez peut-être moins à l'aise :
install_name_tool -change \
/ade/b/3071542110/oracle/ldap/lib/libnnz11.dylib \
$ORACLE_HOME/libnnz11.dylib \
$ORACLE_HOME/libclntsh.dylib.11.1
Selon la version/construction exacte du client, vous devrez peut-être rendre le fichier accessible en écriture avant d'exécuter cette commande, avec :
chmod 755 $ORACLE_HOME/libclntsh.dylib.11.1
Avec ces changements, je peux exécuter le cx_Oracle
tests sur El Capitan.
En savoir plus sur install_name_change
ici.
Il semble que le client instantané 12c ait été construit de manière à éviter ce problème, donc la mise à niveau vers cela sera plus simple que de pirater les fichiers 11g.