instala cx_oracle para python
install cx_oracle (8)
Estoy en Debian 5, he intentado instalar el módulo cx_oracle para Python sin ningún éxito. Primero, instalé oracle-xe-client y su dependencia (seguí el tutorial en el siguiente enlace here ).
Luego, utilicé los scripts en /usr/lib/oracle/xe/app/oracle/product/10.2.0/client/bin para rellenar variables de entorno como PATH, ORACLE_HOME y NLS_LANG.
Una vez que esto se completó, traté de ejecutar:
sudo easy_install cx_oracle
Pero sigo recibiendo el siguiente error:
Searching for cx-oracle
Reading http://pypi.python.org/simple/cx_oracle/
Reading http://cx-oracle.sourceforge.net
Reading http://starship.python.net/crew/atuining
Best match: cx-Oracle 5.0.4
Downloading http://prdownloads.sourceforge.net/cx-oracle/cx_Oracle-5.0.4.tar.gz?download
Processing cx_Oracle-5.0.4.tar.gz
Running cx_Oracle-5.0.4/setup.py -q bdist_egg --dist-dir /tmp/easy_install-xsylvG/cx_Oracle-5.0.4/egg-dist-tmp-8KoqIx
error: cannot locate an Oracle software installation
¿Alguna idea de lo que extrañé aquí?
Alternativamente, puede instalar el módulo cx_Oracle sin el PIP usando los siguientes pasos
- Descargue la fuente desde aquí https://pypi.python.org/pypi/cx_Oracle [cx_Oracle-6.1.tar.gz]
Extraiga el alquitrán usando los siguientes comandos (Linux)
gunzip cx_Oracle-6.1.tar.gz
tar -xf cx_Oracle-6.1.tar
cd cx_Oracle-6.1
Construye el módulo
python setup.py build
Instalar el módulo
instalación de python setup.py
Creo que es posible que el sudo no tenga acceso para obtener ORACLE_HOME. Puedes hacer esto.
sudo visudo
modificar el texto agregar
Valores predeterminados env_keep + = "ORACLE_HOME"
entonces
sudo python setup.py build install
Esto funcionó para mí en Ubuntu 16 :
Descargue (''instantclient-basic-linux.x64-12.2.0.1.0.zip'' y ''instantclient-sdk-linux.x64-12.2.0.1.0.zip'') desde el sitio web de Oracle y luego siga el script (puede hacer pieza por pieza y lo hice como ROOT):
apt-get install -y python-dev build-essential libaio1
mkdir -p /opt/ora/
cd /opt/ora/
## Now put 2 ZIP files:
# (''instantclient-basic-linux.x64-12.2.0.1.0.zip'' and ''instantclient-sdk-linux.x64-12.2.0.1.0.zip'')
# into /opt/ora/ and unzip them -> both will be unzipped into 1 directory: /opt/ora/instantclient_12_2
rm -rf /etc/profile.d/oracle.sh
echo "export ORACLE_HOME=/opt/ora/instantclient_12_2" >> /etc/profile.d/oracle.sh
echo "export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME" >> /etc/profile.d/oracle.sh
chmod 777 /etc/profile.d/oracle.sh
source /etc/profile.d/oracle.sh
env | grep -i ora # This will check current ENVIRONMENT settings for Oracle
rm -rf /etc/ld.so.conf.d/oracle.conf
echo "/opt/ora/instantclient_12_2" >> /etc/ld.so.conf.d/oracle.conf
ldconfig
cd $ORACLE_HOME
ls -lrth libclntsh* # This will show which version of ''libclntsh'' you have... --> needed for following line:
ln -s libclntsh.so.12.1 libclntsh.so
pip install cx_Oracle # Maybe not needed but I did it anyway (only pip install cx_Oracle without above steps did not work for me...)
Sus scripts de Python ahora están listos para usar ''cx_Oracle'' ... ¡Disfrútalo!
Gracias Burhan Khalid. Tu consejo para hacer un enlace suave hace que mi instalación finalmente funcione.
Recordar:
Necesita la versión básica y la versión SDK del cliente instantáneo
Debe establecer LD_LIBRARY_PATH y ORACLE_HOME
- Necesita crear un enlace suave (ln -s libclntsh.so.12.1 libclntsh.so en mi caso)
Nada de esto está documentado en ninguna parte, lo cual es bastante increíble y bastante frustrante. Pasé más de 3 horas ayer con compilaciones fallidas porque no sabía crear un enlace suave.
La forma alternativa, que no requiere RPM. Debes ser root
Dependencias
Instale los siguientes paquetes:
apt-get install python-dev build-essential libaio1
Descarga Instant Client para Linux x86-64
Descargue los siguientes archivos del sitio de descarga de Oracle:
Extrae los archivos zip
Descomprime los archivos zip descargados en algún directorio, estoy usando:
/opt/ora/
Agregar variables de entorno
Cree un archivo en
/etc/profile.d/oracle.sh
que incluyaexport ORACLE_HOME=/opt/ora/instantclient_11_2 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME
Cree un archivo en
/etc/ld.so.conf.d/oracle.conf
que incluya/opt/ora/instantclient_11_2
Ejecute el siguiente comando
sudo ldconfig
Nota: es posible que deba reiniciar para aplicar la configuración
Crear un enlace simbólico
cd $ORACLE_HOME ln -s libclntsh.so.11.1 libclntsh.so
Instalar el paquete
cx_Oracle
pythonPuede instalar usando
pip
pip install cx_Oracle
O instala manualmente
Descargue el zip de origen de cx_Oracle que corresponde a su versión de Python y Oracle. A continuación, expanda el archivo y ejecútelo desde el directorio extraído:
python setup.py build python setup.py install
Lo siguiente funcionó para mí, tanto en mac como en Linux. Este comando debería descargar los archivos adicionales necesarios, sin necesidad de establecer variables de entorno.
python -m pip install cx_Oracle --pre
Tenga en cuenta que la opción --pre es para el desarrollo y la versión preliminar del controlador de Oracle. A partir de esta publicación, estaba agarrando cx_Oracle-6.0rc1.tar.gz
, que era necesario. (Estoy usando Python 3.6)
Te recomiendo que tomes los archivos rpm e los instales con alien. De esta forma, más adelante podrá ejecutar apt-get purge no-longer-needed
.
En mi caso , la única variable env que necesitaba es LD_LIBRARY_PATH
, así que lo hice:
echo export LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client/lib >> ~/.bashrc
source ~/.bashrc
Supongo que en su caso esa variable de ruta será /usr/lib/oracle/xe/app/oracle/product/10.2.0/client/lib
.
Thx Burhan Khalid, pasé por alto tu cita de "Tienes que ser root", pero encontré el camino cuando no eres la raíz here .
En el punto 7 necesitas usar:
sudo env ORACLE_HOME=$ORACLE_HOME python setup.py install
O
sudo env ORACLE_HOME=/path/to/instantclient python setup.py install