Cómo instalar cx_Oracle en El Capitan

Según tengo entendido, hubo algunos cambios relacionados con el SIP que dificultan la instalación.

Estas páginas tienen los antecedentes y consejos para instalar. http://sourceforge.net/p/cx-oracle/mailman/message/34534872/ , http://stefanoapostolico.com/2015/10/08/install_cx_oracle_with_sip_enabled.html

Juntando todo esto, aquí estaba mi mejor oportunidad de instalarlo en mi virtualenv pero, por desgracia, todavía no es bueno.

El error que estoy recibiendo es:

Traceback (most recent call last): File "", line 1, in  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 

Aquí están todos mis pasos de instalación:

 $ 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 "", line 1, in  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 

Intenté lo anterior y obtuve el siguiente error al intentar instalar cx_Oracle usando Oracle instantclient 12.1 :

 [535]: /opt/instantclient_12_1 $ python -c "import cx_Oracle" Traceback (most recent call last): File "", line 1, in  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 

Observe el @rpath en el error: resulta que al comstackr la biblioteca cx_Oracle (para el cliente 12.1) en El Capitán, el comstackdor gcc espera que se establezca el indicador -rpath para saber dónde encontrar las bibliotecas vinculadas dinámicamente (*. dylib). De forma predeterminada, en el cliente instantáneo 12.1, pip no hace esto por usted.

 # Set -rpath option before installing...this will use $ORACLE_HOME during comstacktion 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 

El python -c "import cx_Oracle" debe reportar errores.

Para obtener una guía de instalación completa (incluida la descarga y la configuración del cliente instantáneo), consulte mi publicación en http://thelaziestprogrammer.com/sharrington/databases/oracle/install-cx_oracle-mac para obtener más información.

Gracias por las instrucciones Greg.

Tuve que crear un enlace simbólico para que mi instalación de cx_Oracle pip funcionara (usando los argumentos que proporcionaste anteriormente). Es posible que desee agregar estos a sus instrucciones.

 ln -s libclntsh.dylib.11.1 libclntsh.dylib 

También creé otro enlace para libocci como se sugiere en esta guía de instalación: https://gist.github.com/thom-nic/6011715

 ln -s libocci.dylib.11.1 libocci.dylib 

Creo que lo arreglé. Básicamente todo en mis pasos publicados arriba fue correcto.

Pero terminé usando esto para la instalación de pip para asegurarme de que arrastra una nueva copia y la reconstruye (y tal vez obtiene una versión posterior ??)

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

Entonces pude importar cx_oracle sin problemas pero recibí un error “‘ORA-21561: Falló la generación de OID'” al conectarme al servidor externo.

Luego seguí las instrucciones aquí y agregué una línea con mi nombre de host al archivo / etc / hosts y todo funciona ahora.

por ejemplo, agregó una línea como esta al final de / etc / hosts

127.0.0.1 localhost my-host-name

Para instalar cx_Oracle en OS X, descargue los paquetes de 64 bits de Instant Client basic y sdk para OS X desde http://www.oracle.com/technetwork/topics/intel-macsoft-096467.html . Con esta versión de Instant Client puede conectarse a las bases de datos 10g, 11g y 12c. Esta versión está vinculada para evitar el problema SIP que Apple introdujo recientemente (que afectó a Instant Client 11.2).

Entonces ejecuta algo como:

 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 

Puede o no necesitar otras opciones de pip, como se menciona en https://stackoverflow.com/a/33284974/4799035

También tenga en cuenta: si su Python se ejecuta como 32 bits e instaló cx_Oracle como 64 bits, también resolverá este problema. Para evitar este problema, ejecute siempre su comando como superusuario ‘su’ y obtenga claro que ‘su’ python es de 32 o 64 bits. revise su bit de python ¿Cómo puedo determinar si mi shell de python se está ejecutando en modo de 32 bits o de 64 bits en OS X?

fuerza utilizando 64bit run:

arch -x86_64 / usr / bin / python27

fuerza usando 32bit run:

los valores predeterminados escriben com.apple.versioner.python Prefer-32-Bit -bool yes