Oracle
 sql >> база данни >  >> RDS >> Oracle

cx Oracle ImportError

Това е свързано с промените в защитата на целостта на системата (SIP) в El Capitan, което наред с други неща предотвратява наследяването на DYLD_LIBRARY_PATH от създадените процеси.

Можете да модифицирате cx_Oracle.so библиотека, за да използва действителния път към клиентската библиотека на Oracle вместо търсения път, който вече не работи; уверете се, че имате ORACLE_HOME все още е настроен да сочи към действителното ви моментално местоположение на клиента и също така имайте предвид, че точният път, докладван от ImportError трябва да се използва - 3071542110 стойността може да варира в зависимост от версията/версията на Instant Client, която сте инсталирали:

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

... но тогава тази библиотека не може да намери друга 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

Така че ще трябва да промените и тази библиотека, която може да ви е по-малко удобна:

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

В зависимост от точната версия/комплект на клиента може да се наложи да направите файла за запис, преди да изпълните тази команда, с:

chmod 755 $ORACLE_HOME/libclntsh.dylib.11.1

С тези промени мога да стартирам cx_Oracle тестове на El Capitan.

Повече за install_name_change тук.

Изглежда, че мигновеният клиент 12c е създаден по начин, който избягва този проблем, така че надграждането до него ще бъде по-лесно от хакването на 11g файлове.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Вземане на запис с максимална дата

  2. Защо Mysql's Group By и Oracle's Group по поведение са различни

  3. Как да разберете кога е създадена определена таблица в Oracle?

  4. Пресъздайте лош RAC възел

  5. получавате редица уникални стойности, без да разделяте стойности, които принадлежат на един и същ блок от стойности