Skip to content

Instantly share code, notes, and snippets.

@rnugraha
Forked from thom-nic/cx_oracle_instructions.md
Last active September 8, 2016 12:28
Show Gist options
  • Select an option

  • Save rnugraha/b6e839206e6132cc1b8240a096b1c14a to your computer and use it in GitHub Desktop.

Select an option

Save rnugraha/b6e839206e6132cc1b8240a096b1c14a to your computer and use it in GitHub Desktop.
Installing CX Oracle for Python & Mac OS X. Instructions exist around the web, but they seem to be piecemeal and incomplete.

Installing cx_Oracle for Python/ Mac OSX

Portions taken from http://www.cs.utexas.edu/~mitra/csSpring2011/cs327/cx_mac.html (in case that link ever dies.)

Assume you've got homebrew installed.

Download the following files from Oracle

Create a directory /usr/lib/share/oracle

export ORACLE_HOME=/usr/lib/share/oracle
export VERSION=11.2.0.3.0
export ARCH=x86_64

mkdir -p $ORACLE_HOME

Unpack both files to that directory:

cd $ORACLE_HOME
tar -xzf instantclient-basic-$VERSION-macosx-x64.zip
tar -xzf instantclient-sdk-$VERSION-macosx-x64.zip

ln -s libclntsh.dylib.11.2 libclntsh.dylib
ln -s libocci.dylib.11.2 libocci.dylib

export DYLD_LIBRARY_PATH=$ORACLE_HOME
export LD_LIBRARY_PATH=$ORACLE_HOME

(Note I did not have to do anything with ottclasses.zip as suggested in the original utexas instructions.)

If you're using Pip:

Last step is to simply run pip, you might have to add an arch flag:

env ARCHFLAGS="-arch $ARCH" pip install cx_Oracle

If you're building from source:

Download cx_Oracle-version.tar.gz from Sourceforge

export CX_ORA_VERSION=5.1.2
tar -xzf cx_Oracle-$CX_ORA_VERSION.tar.gz
cd cx_Oracle-$CX_ORA_VERSION

env ARCHFLAGS="-arch $ARCH" python setup.py build
sudo python setup.py install

Notes

Some folks have recommended compiling for 32-bit (i386) instead, although I'm not sure why. 64 bit seems to work for me so YMMV.

Basically:

# compile cx_Oracle for 32-bit (requires downloading 32-bit instantclient sources)
ARCHFLAGS="-arch i386" pip install cx_Oracle

# then make your virtualenv python 32-bit only:
virtualenv .
mv bin/python python.fat
lipo python.fat -remove x86_64 -output bin/python

See: http://stackoverflow.com/questions/8169946/cant-get-cx-oracle-to-work-with-python-version-2-7-mac-os-10-7-2-lion-mis/8452731#8452731


Build and Install cx_Oracle on Mac Leopard Intel

I finally succeeded in building and installing cx_Oracle on a Mac. I will outline the steps that I took. There are many redundant steps that I may later take out. But there are checks that I made on the way that really helped.

The first Mac that I installed cx_Oracle was a 2.4 GHz Intel Core 2 Duo running Mac OSX 10.6.6. It had 4 GB of Memory. Most of my work was done on a terminal window.

Check Python Installation

The OSX comes with a Python interpreter. I ran a check to find the version number.

$ python -V Python 2.6.1 This was sufficient for my needs. I decided not to upgrade to Python version 2.7.1 Xcode from Apple

The Xcode package is available from Apple Developer. You will need a login account but that is free. Now you do not need Xcode 4. Xcode 3 is sufficient because all we are interested in is the gcc compiler. After you login look for a link that says Looking for Xcode 3? I downloaded X code 3.2.6 and iOS SDK 4.3. It was 4.1 GB in size and is best done when you know you will not be using your Mac.

After the download, the installation went off smoothly. I restarted the Mac and on a terminal window checked that the gcc compiler was installed correctly.

$ which gcc /usr/bin/gcc

$ gcc -v gcc version 4.2.1 You can also do man gcc to get the online manual for gcc. Install Oracle Instant Client

The cx_Oracle has a dependency. It needs Oracle Instant Client from Oracle. Click on the link Instant Client for Mac OS X (Intel x86). Accept the license agreement and download Version 10.2.0.4 (64-bit). I tried the 32-bit and it does NOT work. You will need your Oracle account to download the following packages:

instantclient-basic-10.2.0.4.0-macosx-x64.zip instantclient-sdk-10.2.0.4.0-macosx-x64.zip I created a directory called oracle to unpack the packages. The pathname on my machine was /Users/utcs/oracle. On your machine, it will be your user name instead of utcs. I moved both the basic and sdk packages into the oracle directory and unzipped them. After unzipping the basic package I got a folder instantclient_10_2.

After unzipping the sdk package, I got a folder called instantclient_10_2-1. Inside that folder was another folder called sdk. I moved the folder named sdk inside the folder instantclient_10_2.

From a terminal window I changed directory to sdk. On my machine, the full path name was /Users/utcs/oracle/instantclient_10_2/sdk. There is another .zip file called ottclasses.zip. I unzipped that as follows:

$ unzip ottclasses.zip It produced a folder called oracle. I changed directory to /Users/utcs/oracle/instantclient_10_2. I ran the following command to copy all the files in the sdk folder. $ cp -R ./sdk/* . $ cp -R ./sdk/include/* . The last two commands may not have been necessary. But it makes it easier to locate the header files. Setting up the Environment Variables

In my home directory /Users/utcs I created a .profile file. Its content was as follows:

export ORACLE_HOME=/Users/utcs/oracle/instantclient_10_2 export DYLD_LIBRARY_PATH=$ORACLE_HOME export LD_LIBRARY_PATH=$ORACLE_HOME Restart the machine. Open another terminal window and run the following commands to check that the environment variables have been set properly: $ source .profile $ echo $ORACLE_HOME $ echo $DYLD_LIBRARY_PATH $ echo $LD_LIBRARY_PATH You should see the path names printed out correctly. I created two symbolic links in the $ORACLE_HOME directory (/Users/utcs/oracle/instantclient_10_2) as follows: ln -s libclntsh.dylib.10.1 libclntsh.dylib ln -s libocci.dylib.10.1 libocci.dylib If you run the command ls -l in that directory you should see the symbolic links. Building and Installing cx_Oracle

Download from SourceForge cx_Oracle version 5.0.4. You need to get the package that says Source Code only. In your Download folder you will find cx_Oracle-5.0.4.tar. I moved it to /Users/utcs/oracle. To untar, I used the following command:

tar -xvf cx_Oracle-5.0.4.tar After untarring I had a subdirectory called cx_Oracle-5.0.4. In a terminal window I changed directory to /Users/utcs/oracle/cx_Oracle-5.0.4. I checked in that window that all the environment variables were set properly by doing

echo $ORACLE_HOME echo $LD_LIBRARY_PATH echo $DYLD_LIBRARY_PATH which python which gcc I did not have administrative privileges on this Mac so to build I did python setup.py build I checked to output. There were many warning messages that I ignored. Even a single error message would have indicated that the build process did not succeed. I next installed cx_Oracle by python setup.py install The install also finished without any error messages. Test the cx_Oracle installation

On a terminal window type python. It should bring up Python in interactive mode. Then type import cx_Oracle. It should add the package to your path without any errors. Get out of the interactive mode using Control-D.

Now copy and paste this script into a file called Check.py. Change the user name and run it on the command line.

import cx_Oracle, string, getpass

def main():

Get password

pswd = getpass.getpass()

Build connection string

user = "CS327_jdoe" host = "oracle.microlab.cs.utexas.edu" port = "1521" sid = "orcl" dsn = cx_Oracle.makedsn (host, port, sid)

Connect to Oracle and test

con = cx_Oracle.connect (user, pswd, dsn) if (con): print "Connection successful" print con.version else: print "Connection not successful"

con.close()

main() You should see Connection successful if all the other tests were successful.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment