sql >> Databasteknik >  >> RDS >> Oracle

cx oracle ImportError

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.



  1. Översikt över DBCC CheckDB-funktion

  2. Testar DML-satser för OLTP i minnet

  3. Hur man skickar tabellvärdesparametrar till lagrad procedur från .net-kod

  4. Hur man får aktuellt Auto_Increment-sekvensnummer för MySQL / MariaDB-tabell