cx_Oracle does not recognize the Oracle software installation location used for installation on Linux
have been able to successfully install cx_Oracle for Python 3.4 on my Windows 8 laptop, and now I’m trying to get the same setup on a Linux machine (cx_Oracle and Python 3.4). I got this error when running setup.py files from cx_Oracle-5.1.3.tar.gz:
sudo python3 setup.py install Traceback (most recent call last): File "setup.py", line 135, in <module> raise DistutilsSetupError("cannot locate an Oracle software " \ distutils.errors.DistutilsSetupError: cannot locate an Oracle software installation
According to some of the other answers I’ve looked at ( easy_install cx_Oracle (python package) on Windows、 https://gist.github.com/jarshwah/3863378), I installed these 3 instant client rpm:
rpm -ivh oracle-instantclient12.1-basic-18.104.22.168.0-1.i386.rpm rpm -ivh oracle-instantclient12.1-devel-22.214.171.124.0-1.i386.rpm rpm -ivh oracle-instantclient12.1-sqlplus-126.96.36.199.0-1.i386.rpm
Then I set the ORACLE_HOME to the folder they were installed into, which should help python identify the location of the oracle files so that it can install correctly.
Every time I try to run the setup.py file, I still get the same “Oracle software installation not found” error.
Any idea what I need to do to successfully install cx_oracle?
Update for more information:
echo $ORACLE_HOME returns
/instantclient_12_1, which is where the rpm file is installed.
This is the contents of my /instantclient_12_1 directory:
adrci libnnz12.so libsqlplusic.so tnsnames.ora BASIC_README libocci.so libsqlplus.so tnsnames.ora_andy genezi libocci.so.12.1 ojdbc6.jar uidrvci glogin.sql libociei.so ojdbc7.jar xstreams.jar libclntshcore.so.12.1 libocijdbc12.so sdk libclntsh.so libons.so sqlplus libclntsh.so.12.1 liboramysql12.so SQLPLUS_README
This is a bit different from my Windows 8 installation directory – that directory has
.dll and .sym files, like
. Should the Linux version installed by the instant client have different files?
Update some solutions:
I found a solution to install cx_Oracle correctly, but only during that shell instance:
I set these two environment variables:
export ORACLE_HOME=/instantclient_12_1 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME
Then I created a symbolic link:
ln -s libclntsh.so.12.1 libclntsh.so
After that, go to the
cx_oracle folder and do this:
python3 setup.py build python3 setup.py install
For some reason,
sudo python3 setup.py install doesn’t work for this.
Update link to related issue:
My next problem is to have environment variables persist outside of the shell instance so that I don’t have to define environment variables every time. The environment variables I put in profile.d show up on my echo, but python doesn’t import cx_oracle correctly, and for some reason I had to export the environment variables again. I don’t know the correct program for posting different issues related to one issue, so I opened a new issue here :
Please help me with this, I feel completely unable to try to get it to work. When I echo them, the environment variables show up, but they only seem to work if you export them again before running the python code.
as Petriborg suggested at build time to set the
path LD_RUN_PATH the
cx_Oracle shared repository that will be built during installation to contain the Oracle shared library files. As I suggested in the first answer, this eliminates the need for
For the RPM you are using,
ORACLE_HOME should be set to /
usr/lib/oracle/12.1/client. If you are using
$ export ORACLE_HOME=/usr/lib/oracle/12.1/client $ export LD_RUN_PATH=/usr/lib/oracle/12.1/client/lib:$LD_RUN_PATH $ pip install cx_Oracle $ python -c 'import cx_Oracle; print(cx_Oracle.version)' 5.1.3
Read this documentation for some information about installing and executing applications that use client libraries.