sql >> Base de Datos >  >> RDS >> Oracle

error de importación cx oracle

Esto está relacionado con los cambios de protección de integridad del sistema (SIP) en El Capitan, que, entre otras cosas, evita que DYLD_LIBRARY_PATH sea heredado por los procesos generados.

Puede modificar el cx_Oracle.so biblioteca para usar la ruta real a la biblioteca del cliente de Oracle en lugar de la ruta buscada que ya no funciona; asegúrese de tener ORACLE_HOME todavía configurado para señalar la ubicación real de su cliente instantáneo, y también tenga en cuenta que la ruta exacta informada por ImportError debe usarse - el 3071542110 el valor puede variar según la versión/compilación de Instant Client que haya instalado:

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

... pero esa biblioteca no puede encontrar otra de 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

Por lo tanto, también deberá cambiar esa biblioteca, con la que puede sentirse menos cómodo:

install_name_tool -change \
  /ade/b/3071542110/oracle/ldap/lib/libnnz11.dylib \
  $ORACLE_HOME/libnnz11.dylib \
  $ORACLE_HOME/libclntsh.dylib.11.1

Dependiendo de la versión/construcción exacta del cliente, es posible que deba hacer que el archivo se pueda escribir antes de ejecutar ese comando, con:

chmod 755 $ORACLE_HOME/libclntsh.dylib.11.1

Con esos cambios puedo ejecutar cx_Oracle pruebas en El Capitán.

Más información sobre install_name_change aquí.

Parece que el cliente instantáneo 12c se creó de una manera que evita este problema, por lo que actualizarlo será más simple que piratear los archivos 11g.