"error: cannot locate an Oracle software installation" When trying to install cx_Oracle

Don't use easy_install or pip, they don't really work very well for installing cx_Oracle since there are a number of environmental dependencies that the install scripts don't set up automatically. You need to get an oracle client driver, the quickest of which to find is the instantclient. Then point your ORACLE_HOME and PATH at the install location for the drivers, and install cx_Oracle itself. You should be good to go after that.

see: easy_install cx_Oracle (python package) on Windows

The question is about windows, but the answer includes info on *nix.


Install Oracle Client

  1. Download Oracle Client: http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html

    Example: oracle-instantclient12.2-basic-12.2.0.1.0-1.x86_64.rpm

  2. Install Alien:

    sudo apt-get install alien
    
  3. install the RPM in the Ubuntu system:

    sudo alien -i oracle-instantclient12.2-basic-12.2.0.1.0-1.x86_64.rpm`
    
  4. Add to environment variables

    vim ~/.bashrc
    export ORACLE_HOME=/usr/lib/oracle/12.2/client64/lib/
    export LD_RUN_PATH=/usr/lib/oracle/12.2/client64/lib:$LD_RUN_PATH
    source ~/.bashrc
    sudo ln -s /usr/lib/oracle/12.2/client64 $ORACLE_HOME/include`
    

Finally

pip install cx-Oracle

I installed cx_Oracle, but I also had to install an Oracle client to use it (the cx_Oracle module is just a common and pythonic way to interface with the Oracle client in Python).

So you have to set the variable ORACLE_HOME to your Oracle client folder (on Unix: via a shell, for instance; on Windows: create a new variable if it does not exist in the Environment variables of the Configuration Panel). Your folder $ORACLE_HOME/network/admin (%ORACLE_HOME%\network\admin on Windows) is the place where you would place your tnsnames.ora file.