Sorry for the ugly, I do not really maintain this anymore.
Almost 2 months ago, I started on a project that required the use of Python and access to an Oracle database. It took me multiple days in a row to finally get it up and running so that I could actually make progress on the project, but once I did, I thought nothing of finally getting it to work. However, I was recently approached by another person at work who had to use the cx_Oracle package to access an Oracle DB through Python, and realized the value of actually putting together a post about the steps required.
First off, it is really easy to get it running on Linux. I mean super easy to get Python and cx_Oracle up and running. Secondly, I have an XP machine at work, so no guarantees that this will work with all other Windows Operating Systems until I get to test it on one (not possible till about September at the earliest, I'll put a todo item in my calendar to try to remember to do it).
Alright, down to the nitty-gritty of it. You first need to install a recent, if not the latest, version of Python, if you don't already have it of course. When I was installing it on my work computer, that was Python 2.6.5. Now that would be Python 2.7, but since Python is intentionally backwards compatible, it SHOULDN'T matter. For installing Python, be sure to follow one of the many Python install guides available on the web, but the quick run-down of the install process is:
Next, run the cx_Oracle .msi installer for your particular Windows install. Now that was the easy part.
Next up is the part that most people seem to miss, having an Oracle client on your local machine. Oracle suggests the use of the Oracle Instant Client (updated link thanks to Tim in the comments), and that's what I used this time. Oracle's instructions seem to have improved since I first installed the Oracle Instant Client, but that doesn't mean they are easy to follow.
You have now installed cx_Oracle successfully. To really test it, you can open up a Python command prompt and run the following lines of code to test it (case sensitive).
If either of those steps went wrong, double check the steps. If you still don't know, comment on the post, or email me (my email is lying around somewhere on this site), and I'll do my best to help you. There are also many forums and forum threads scattered around that have tried to explain these points as well, but I found them to be inadequate.
Lastly, Google is your friend for finding out about the different functions available in cx_Oracle, and the documentation isn't terrible for this either.