Как установить cx_Oracle на El Capitan

Насколько я понимаю, произошли некоторые изменения, связанные с SIP, которые затрудняют установку.

На этих страницах есть справочная информация и советы по установке. http://sourceforge.net/p/cx-oracle/mailman/message/34534872/ , http://stefanoapostolico.com/2015/10/08/install_cx_oracle_with_sip_enabled.html

Взяв все это вместе, вот мой лучший снимок при установке его на мой виртуальный, но, увы, все равно ничего хорошего.

Ошибка, которую я получаю:

Traceback (most recent call last): File "<string>", line 1, in <module> ImportError: dlopen(/Users/me/sx_direct_env/lib/python2.7/site-packages/cx_Oracle.so, 2): Library not loaded: /b/227/rdbms/lib/libclntsh.dylib.10.1 Referenced from: /Users/me/sx_direct_env/lib/python2.7/site-packages/cx_Oracle.so Reason: image not found 

Вот все мои шаги установки:

 $ cd /Users/me/sx_direct_env/lib/python2.7 $ mkdir oracle $ cd oracle $ export ORACLE_HOME=$PWD $ export DYLD_LIBRARY_PATH=$ORACLE_HOME $ export LD_LIBRARY_PATH=$ORACLE_HOME $ export PATH=$PATH:$ORACLE_HOME $ unzip ~/Downloads/instantclient-basic-macos.x64-11.2.0.4.0.zip $ unzip ~/Downloads/instantclient-sdk-macos.x64-11.2.0.4.0.zip $ mv instantclient_11_2/* . $ rmdir instantclient_11_2 $ curl -O https://raw.githubusercontent.com/kubo/fix_oralib_osx/master/fix_oralib.rb $ ruby -a fix_oralib.rb adrci: add rpath: @loader_path change install name from: /ade/b/3071542110/oracle/rdbms/lib/libclntsh.dylib.11.1 to: @rpath/libclntsh.dylib.11.1 change install name from: /ade/dosulliv_ldapmac/oracle/ldap/lib/libnnz11.dylib to: @rpath/libnnz11.dylib genezi: add rpath: @loader_path change install name from: /ade/b/3071542110/oracle/rdbms/lib/libclntsh.dylib.11.1 to: @rpath/libclntsh.dylib.11.1 libclntsh.dylib.11.1: add rpath: @loader_path change identification name from: /ade/b/3071542110/oracle/rdbms/lib/libclntsh.dylib.11.1 to: @rpath/libclntsh.dylib.11.1 change install name from: /ade/dosulliv_ldapmac/oracle/ldap/lib/libnnz11.dylib to: @rpath/libnnz11.dylib libnnz11.dylib: change identification name from: /ade/dosulliv_ldapmac/oracle/ldap/lib/libnnz11.dylib to: @rpath/libnnz11.dylib libocci.dylib.11.1: change identification name from: /ade/b/3071542110/oracle/rdbms/lib/libocci.dylib.11.1 to: @rpath/libocci.dylib.11.1 libociei.dylib: add rpath: @loader_path change install name from: /ade/b/3071542110/oracle/rdbms/lib/libclntsh.dylib.11.1 to: @rpath/libclntsh.dylib.11.1 libocijdbc11.dylib: add rpath: @loader_path change install name from: /ade/b/2475221476/oracle/rdbms/lib/libclntsh.dylib.11.1 to: @rpath/libclntsh.dylib.11.1 change install name from: /ade/b/2475221476/oracle/ldap/lib/libnnz11.dylib to: @rpath/libnnz11.dylib uidrvci: add rpath: @loader_path change install name from: /ade/b/3071542110/oracle/rdbms/lib/libclntsh.dylib.11.1 to: @rpath/libclntsh.dylib.11.1 change install name from: /ade/dosulliv_ldapmac/oracle/ldap/lib/libnnz11.dylib to: @rpath/libnnz11.dylib $ pip install cx_oracle Collecting cx-oracle Installing collected packages: cx-oracle Successfully installed cx-oracle-5.2 $ python -c "import cx_Oracle" Traceback (most recent call last): File "<string>", line 1, in <module> ImportError: dlopen(/Users/me/sx_direct_env/lib/python2.7/site-packages/cx_Oracle.so, 2): Library not loaded: /b/227/rdbms/lib/libclntsh.dylib.10.1 Referenced from: /Users/me/sx_direct_env/lib/python2.7/site-packages/cx_Oracle.so Reason: image not found 

Я попытался сделать это и получил следующую ошибку при попытке установить cx_Oracle с помощью Oracle instantclient 12.1 :

 [535]: /opt/instantclient_12_1 $ python -c "import cx_Oracle" Traceback (most recent call last): File "<string>", line 1, in <module> ImportError: dlopen(/Library/Python/2.7/site-packages/cx_Oracle.so, 2): Library not loaded: @rpath/libclntsh.dylib.12.1 Referenced from: /Library/Python/2.7/site-packages/cx_Oracle.so Reason: image not found 

Обратите внимание на ошибку @rpath в ошибке: выясняется, что при создании библиотеки cx_Oracle (для instantclient 12.1) в El Capitan компилятор gcc ожидает, что флаг -rpath будет установлен, чтобы узнать, где найти вышеупомянутые динамически связанные библиотеки (*. dylib). По умолчанию, на instantclient 12.1, pip не делает этого для вас.

 # Set -rpath option before installing...this will use $ORACLE_HOME during compilation export FORCE_RPATH=TRUE pip install cx_Oracle # And verify cx_Oracle was correctly installed python -c "import cx_Oracle" # If this line fails install cx_Oracle with: # pip install --no-cache-dir --allow-external --allow-unverified cx_oracle 

python -c "import cx_Oracle" должен сообщать об ошибках.

Для получения полного руководства по установке (включая загрузку и настройку instantclient) ознакомьтесь со своим сообщением по адресу http://thelaziestprogrammer.com/sharrington/databases/oracle/install-cx_oracle-mac .

Спасибо за инструкции Грега.

Мне пришлось создать символическую ссылку для моей установки cx_Oracle pip для работы (используя приведенные выше аргументы). Вы можете добавить их в свои инструкции.

 ln -s libclntsh.dylib.11.1 libclntsh.dylib 

Я также создал еще одну ссылку для libocci, предложенную в этом руководстве по установке: https://gist.github.com/thom-nic/6011715

 ln -s libocci.dylib.11.1 libocci.dylib 

Думаю, я это исправил. В основном все, что было в моих действиях выше, было правильным.

Но я закончил использовать это для установки pip, чтобы убедиться, что он вытащил новую копию и перестроит (и, возможно, получит более позднюю версию?)

 $ pip install --no-cache-dir --allow-external --allow-unverified cx_oracle 

Затем я смог импортировать cx_oracle без проблем, но я получал сообщение об ошибке «ORA-21561: генерация OID не удалась» при подключении к внешнему серверу.

Затем я выполнил инструкции и добавил строку с именем моего хоста в файл / etc / hosts, и теперь все работает.

например, добавили строку, подобную этой в конце / etc / hosts

127.0.0.1 localhost my-host-name

Чтобы установить cx_Oracle на OS X, загрузите 64-битные базовые пакеты и клиентские пакеты для OS X с сайта http://www.oracle.com/technetwork/topics/intel-macsoft-096467.html . С помощью этой версии Instant Client вы можете подключаться к базам данных 10g, 11g и 12c. Эта версия связана с тем, чтобы избежать проблемы с SIP, недавно выпущенной Apple (что повлияло на Instant Client 11.2).

Затем запустите что-то вроде:

 unzip instantclient-basic-macos.x64-12.1.0.2.0.zip unzip instantclient-sdk-macos.x64-12.1.0.2.0.zip cd instantclient_12_1 ln -s libclntsh.dylib.12.1 libclntsh.dylib cd .. export ORACLE_HOME=`pwd`/instantclient_12_1 export FORCE_RPATH=1 pip install cx_Oracle 

Вы можете или не нуждаться в других параметрах pip, как указано в https://stackoverflow.com/a/33284974/4799035

Также обратите внимание: если ваш питон работает как 32 бит и установлен cx_Oracle как 64 бит, вы также встретите эту проблему. Чтобы избежать этой проблемы, всегда запускайте свою команду в качестве суперпользователя 'su' и получите четкий 'su' python 32-битный или 64-битный. проверьте свой бит python. Как определить, выполняется ли моя оболочка python в 32- битном или 64-битном режиме на OS X?

сила с использованием 64-битного запуска:

arch -x86_64 / usr / bin / python27

сила с использованием 32-битного запуска:

defaults write com.apple.versioner.python Предпочитаю-32-бит -буталь да