Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

cx oracle ImportError


Isso está relacionado às alterações da proteção de integridade do sistema (SIP) no El Capitan, que, entre outras coisas, impede que DYLD_LIBRARY_PATH seja herdado por processos gerados.

Você pode modificar o cx_Oracle.so library para usar o caminho real para a biblioteca do cliente Oracle em vez do caminho pesquisado que não funciona mais; certifique-se de ter ORACLE_HOME ainda definido para apontar para a localização real do seu cliente instantâneo e observe também que o caminho exato relatado por ImportError deve ser usado - o 3071542110 o valor pode variar dependendo da versão/compilação do Instant Client que você instalou:
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

... mas essa biblioteca não consegue encontrar outra 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

Portanto, você também precisaria alterar essa biblioteca, com a qual pode se sentir menos confortável:
install_name_tool -change \
  /ade/b/3071542110/oracle/ldap/lib/libnnz11.dylib \
  $ORACLE_HOME/libnnz11.dylib \
  $ORACLE_HOME/libclntsh.dylib.11.1

Dependendo da versão/compilação exata do cliente, talvez seja necessário tornar o arquivo gravável antes de executar esse comando, com:
chmod 755 $ORACLE_HOME/libclntsh.dylib.11.1

Com essas alterações posso executar o cx_Oracle testes no El Capitan.

Saiba mais sobre install_name_change aqui.

Parece que o cliente instantâneo 12c foi construído de uma maneira que evita esse problema, portanto, atualizar para isso será mais simples do que invadir os arquivos 11g.