python-cx_Oracle/doc/src/installation.rst

653 lines
25 KiB
ReStructuredText

.. _installation:
************************
cx_Oracle 7 Installation
************************
.. contents:: :local:
Overview
========
To use cx_Oracle 7 with Python and Oracle Database you need:
- Python 2.7 or 3.5 and higher. Older versions of cx_Oracle may work
with older versions of Python.
- Oracle client libraries. These can be from the free `Oracle Instant
Client
<http://www.oracle.com/technetwork/database/database-technologies/instant-client/overview/index.html>`__,
or those included in Oracle Database if Python is on the same
machine as the database. Oracle client libraries versions 18, 12,
and 11.2 are supported on Linux, Windows and macOS. Users have
also reported success with other platforms.
- An Oracle Database. Oracle's standard client-server version
interoperability allows cx_Oracle to connect to both older and newer
databases.
Quick Start cx_Oracle Installation
==================================
- An installation of `Python <https://www.python.org/downloads>`__ is
needed. Python 2.7 and Python 3.5 and higher are supported by cx_Oracle 7.
- Install cx_Oracle from `PyPI
<https://pypi.python.org/pypi/cx_Oracle>`__ with::
python -m pip install cx_Oracle --upgrade
Note: if a binary wheel package is not available for your platform,
the source package will be downloaded instead. This will be compiled
and the resulting binary installed.
- Add Oracle 18, 12 or 11.2 client libraries to your operating
system library search path such as ``PATH`` on Windows or
``LD_LIBRARY_PATH`` on Linux. On macOS move the files to ``~/lib``
or ``/usr/local/lib``.
- If your database is on a remote computer, then download and unzip the client
libraries from the free `Oracle Instant Client
<http://www.oracle.com/technetwork/database/database-technologies/instant-client/overview/index.html>`__
"Basic" or "Basic Light" package for your operating system
architecture.
Instant Client on Windows requires an appropriate `Microsoft
Windows Redistributables
<https://oracle.github.io/odpi/doc/installation.html#windows>`__.
On Linux, the ``libaio`` (sometimes called ``libaio1``) package
is needed.
- Alternatively use the client libraries already available in a
locally installed database such as the free `Oracle XE
<http://www.oracle.com/technetwork/database/database-technologies/express-edition/overview/index.html>`__
release.
Version 18 and 12.2 client libraries can connect to Oracle Database 11.2 or
greater. Version 12.1 client libraries can connect to Oracle Database
10.2 or greater. Version 11.2 client libraries can connect to Oracle
Database 9.2 or greater.
The database abstraction layer in cx_Oracle is `ODPI-C
<https://github.com/oracle/odpi>`__, which means that the `ODPI-C
installation instructions
<https://oracle.github.io/odpi/doc/installation.html>`__ can be useful
to review.
- Create a script like the one below::
# myscript.py
from __future__ import print_function
import cx_Oracle
# Connect as user "hr" with password "welcome" to the "oraclepdb" service running on this computer.
connection = cx_Oracle.connect("hr", "welcome", "localhost/orclpdb")
cursor = connection.cursor()
cursor.execute("""
SELECT first_name, last_name
FROM employees
WHERE department_id = :did AND employee_id > :eid""",
did = 50,
eid = 190)
for fname, lname in cursor:
print("Values:", fname, lname)
Locate your Oracle Database username and password, and the database
connection string. The connection string is commonly of the format
``hostname/servicename``, using the hostname where the database is
running, and the service name of the Oracle Database instance.
Substitute your username, password and connection string in the
code. Run the Python script, for example::
python myscript.py
You can learn how to use cx_Oracle from the :ref:`API documentation <module>`
and `samples
<https://github.com/oracle/python-cx_Oracle/blob/master/samples>`__.
If you run into installation trouble, check out the section on `Troubleshooting`_.
Oracle Client and Oracle Database Interoperability
==================================================
cx_Oracle requires Oracle Client libraries. The libraries provide the
necessary network connectivity to access an Oracle Database instance.
They also provide basic and advanced connection management and data
features to cx_Oracle.
The simplest way to get Oracle Client libraries is to install the free
`Oracle Instant Client
<http://www.oracle.com/technetwork/database/database-technologies/instant-client/overview/index.html>`__
"Basic" or "Basic Light" package. The libraries are also available in
any Oracle Database installation or full Oracle Client installation.
Oracle's standard client-server network interoperability allows
connections between different versions of Oracle Client libraries and
Oracle Database. For certified configurations see Oracle Support's
`Doc ID 207303.1
<https://support.oracle.com/epmos/faces/DocumentDisplay?id=207303.1>`__.
In summary, Oracle Client 18 and 12.2 can connect to Oracle Database 11.2 or
greater. Oracle Client 12.1 can connect to Oracle Database 10.2 or
greater. Oracle Client 11.2 can connect to Oracle Database 9.2 or
greater. The technical restrictions on creating connections may be
more flexible. For example Oracle Client 12.2 can successfully
connect to Oracle Database 10.2.
cx_Oracle uses the shared library loading mechanism available on each
supported platform to load the Oracle Client libraries at runtime. It
does not need to be rebuilt for different versions of the libraries.
Since a single cx_Oracle binary can use different client versions and
also access multiple database versions, it is important your
application is tested in your intended release environments. Newer
Oracle clients support new features, such as the `oraaccess.xml
<http://www.oracle.com/pls/topic/lookup?ctx=dblatest&id=GUID-9D12F489-EC02-46BE-8CD4-5AECED0E2BA2>`__ external configuration
file available with 12.1 or later clients, session pool improvements,
call timeouts with 18 or later clients, and `other enhancements
<http://www.oracle.com/pls/topic/lookup?ctx=dblatest&id=GUID-D60519C3-406F-4588-8DA1-D475D5A3E1F6>`__.
The cx_Oracle function :func:`~cx_Oracle.clientversion()` can be used
to determine which Oracle Client version is in use and the attribute
:attr:`Connection.version` can be used to determine which Oracle
Database version a connection is accessing. These can then be used to
adjust application behavior accordingly. Attempts to use some Oracle
features that are not supported by a particular client/server
combination may result in runtime errors. These include:
- when attempting to access attributes that are not supported by the
current Oracle Client library you will get the error "ORA-24315: illegal
attribute type"
- when attempting to use implicit results with Oracle Client 11.2
against Oracle Database 12c you will get the error "ORA-29481:
Implicit results cannot be returned to client"
- when attempting to get array DML row counts with Oracle Client
11.2 you will get the error "DPI-1050: Oracle Client library must be at
version 12.1 or higher"
Installing cx_Oracle on Linux
=============================
This section discusses the generic installation method on Linux.
Using Python and cx_Oracle RPM packages on Oracle Linux is discussed
in :ref:`oraclelinux`.
Install cx_Oracle
-----------------
The generic way to install cx_Oracle on Linux is to use Python's `Pip
<http://pip.readthedocs.io/en/latest/installing/>`__ package to
install cx_Oracle from `PyPI
<https://pypi.python.org/pypi/cx_Oracle>`__::
python -m pip install cx_Oracle --upgrade
This will download and install a pre-compiled binary `if one is
available <https://pypi.python.org/pypi/cx_Oracle>`__ for your
architecture. If a pre-compiled binary is not available, the source
will be downloaded, compiled, and the resulting binary installed.
Compiling cx_Oracle requires the `Python.h` header file. If you are
using the default python package, this file is in the ``python-devel``
package or equivalent.
Install Oracle Client
---------------------
Using cx_Oracle requires Oracle Client libraries to be installed.
These provide the necessary network connectivity allowing cx_Oracle
to access an Oracle Database instance. Oracle Client versions 18,
12 and 11.2 are supported.
- If your database is on a remote computer, then download the free `Oracle
Instant Client
<http://www.oracle.com/technetwork/database/database-technologies/instant-client/overview/index.html>`__
"Basic" or "Basic Light" package for your operating system
architecture. Use the RPM or ZIP packages, based on your
preferences.
- Alternatively use the client libraries already available in a
locally installed database such as the free `Oracle XE
<http://www.oracle.com/technetwork/database/database-technologies/express-edition/overview/index.html>`__
release.
Oracle Instant Client Zip Files
+++++++++++++++++++++++++++++++
To use cx_Oracle with Oracle Instant Client zip files:
1. Download an Oracle 18, 12, or 11.2 "Basic" or "Basic Light" zip file: `64-bit
<http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html>`__
or `32-bit
<http://www.oracle.com/technetwork/topics/linuxsoft-082809.html>`__, matching your
Python architecture.
2. Unzip the package into a single directory that is accessible to your
application. For example::
mkdir -p /opt/oracle
cd /opt/oracle
unzip instantclient-basic-linux.x64-12.2.0.1.0.zip
3. Install the ``libaio`` package with sudo or as the root user. For example::
sudo yum install libaio
On some Linux distributions this package is called ``libaio1`` instead.
4. If there is no other Oracle software on the machine that will be
impacted, permanently add Instant Client to the runtime link
path. For example, with sudo or as the root user::
sudo sh -c "echo /opt/oracle/instantclient_12_2 > /etc/ld.so.conf.d/oracle-instantclient.conf"
sudo ldconfig
Alternatively, set the environment variable ``LD_LIBRARY_PATH`` to
the appropriate directory for the Instant Client version. For
example::
export LD_LIBRARY_PATH=/opt/oracle/instantclient_12_2:$LD_LIBRARY_PATH
5. If you intend to co-locate optional Oracle configuration files such
as ``tnsnames.ora``, ``sqlnet.ora`` or ``oraaccess.xml`` with
Instant Client, then create a ``network/admin`` subdirectory. For
example::
mkdir -p /opt/oracle/instantclient_12_2/network/admin
This is the default Oracle configuration directory for executables
linked with this Instant Client.
Alternatively, Oracle configuration files can be put in another,
accessible directory. Then set the environment variable
``TNS_ADMIN`` to that directory name.
Oracle Instant Client RPMs
++++++++++++++++++++++++++
To use cx_Oracle with Oracle Instant Client RPMs:
1. Download an Oracle 18, 12, or 11.2 "Basic" or "Basic Light" RPM: `64-bit
<http://www.oracle.com/technetwork/topics/linuxx86-64soft-092277.html>`__
or `32-bit
<http://www.oracle.com/technetwork/topics/linuxsoft-082809.html>`__, matching your
Python architecture.
2. Install the downloaded RPM with sudo or as the root user. For example::
sudo yum install oracle-instantclient12.2-basic-12.2.0.1.0-1.x86_64.rpm
Yum will automatically install required dependencies, such as ``libaio``.
3. If there is no other Oracle software on the machine that will be
impacted, permanently add Instant Client to the runtime link
path. For example, with sudo or as the root user::
sudo sh -c "echo /usr/lib/oracle/12.2/client64/lib > /etc/ld.so.conf.d/oracle-instantclient.conf"
sudo ldconfig
Alternatively, set the environment variable ``LD_LIBRARY_PATH`` to
the appropriate directory for the Instant Client version. For
example::
export LD_LIBRARY_PATH=/usr/lib/oracle/12.2/client64/lib:$LD_LIBRARY_PATH
4. If you intend to co-locate optional Oracle configuration files such
as ``tnsnames.ora``, ``sqlnet.ora`` or ``oraaccess.xml`` with
Instant Client, then create a ``network/admin`` subdirectory under
``lib/``. For example::
sudo mkdir -p /usr/lib/oracle/12.2/client64/lib/network/admin
This is the default Oracle configuration directory for executables
linked with this Instant Client.
Alternatively, Oracle configuration files can be put in another,
accessible directory. Then set the environment variable
``TNS_ADMIN`` to that directory name.
Local Database or Full Oracle Client
++++++++++++++++++++++++++++++++++++
cx_Oracle applications can use Oracle Client 18, 12, or 11.2 libraries
from a local Oracle Database or full Oracle Client installation.
The libraries must be either 32-bit or 64-bit, matching your
Python architecture.
1. Set required Oracle environment variables by running the Oracle environment
script. For example::
source /usr/local/bin/oraenv
For Oracle Database XE, run::
source /u01/app/oracle/product/11.2.0/xe/bin/oracle_env.sh
2. Optional Oracle configuration files such as ``tnsnames.ora``,
``sqlnet.ora`` or ``oraaccess.xml`` can be placed in
``$ORACLE_HOME/network/admin``.
Alternatively, Oracle configuration files can be put in another,
accessible directory. Then set the environment variable
``TNS_ADMIN`` to that directory name.
.. _oraclelinux:
Installing cx_Oracle on Oracle Linux
====================================
Python packages are available for Oracle Linux from Oracle's `public
yum repository <http://yum.oracle.com/>`__. Various versions
of Python are easily installed. Packages for cx_Oracle are also
available, making it easy to keep up to date.
Installation instructions are at `Oracle Linux for Python
Developers <https://yum.oracle.com/oracle-linux-python.html>`__.
Installing cx_Oracle on Windows
===============================
Install cx_Oracle
-----------------
Use Python's `Pip <http://pip.readthedocs.io/en/latest/installing/>`__
package to install cx_Oracle from `PyPI
<https://pypi.python.org/pypi/cx_Oracle>`__::
python -m pip install cx_Oracle --upgrade
This will download and install a pre-compiled binary `if one is
available <https://pypi.python.org/pypi/cx_Oracle>`__ for your
architecture. If a pre-compiled binary is not available, the source
will be downloaded, compiled, and the resulting binary installed.
Install Oracle Client
---------------------
Using cx_Oracle requires Oracle Client libraries to be installed.
These provide the necessary network connectivity allowing cx_Oracle
to access an Oracle Database instance. Oracle Client versions 18,
12 and 11.2 are supported.
- If your database is on a remote computer, then download the free `Oracle
Instant Client
<http://www.oracle.com/technetwork/database/database-technologies/instant-client/overview/index.html>`__
"Basic" or "Basic Light" package for your operating system
architecture.
- Alternatively use the client libraries already available in a
locally installed database such as the free `Oracle XE
<http://www.oracle.com/technetwork/database/database-technologies/express-edition/overview/index.html>`__
release.
Oracle Instant Client Zip Files
+++++++++++++++++++++++++++++++
To use cx_Oracle with Oracle Instant Client zip files:
1. Download an Oracle 18, 12, or 11.2 "Basic" or "Basic Light" zip
file: `64-bit
<http://www.oracle.com/technetwork/topics/winx64soft-089540.html>`__
or `32-bit
<http://www.oracle.com/technetwork/topics/winsoft-085727.html>`__, matching your
Python architecture.
2. Unzip the package into a single directory that is accessible to your
application, for example ``C:\oracle\instantclient_12_2``.
3. Set the environment variable ``PATH`` to include the path that you
created in step 2. For example, on Windows 7, update ``PATH`` in
Control Panel -> System -> Advanced System Settings -> Advanced ->
Environment Variables -> System Variables -> PATH. Alternatively
use ``SET`` to change your ``PATH`` in each command prompt window
before you run python.
If you have other Oracle software installed, then when you use
Python you will need to make sure that the Instant Client
directory, e.g. ``C:\oracle\instantclient_12_2``, occurs in
``PATH`` before any other Oracle directories.
Restart any open command prompt windows.
4. Oracle Instant Client libraries require a Visual Studio redistributable with a 64-bit or 32-bit architecture to match Instant Client's architecture. Each Instant Client version requires a different redistributable version:
- For Instant Client 18 or 12.2 install `VS 2013 <https://support.microsoft.com/en-us/kb/2977003#bookmark-vs2013>`__
- For Instant Client 12.1 install `VS 2010 <https://support.microsoft.com/en-us/kb/2977003#bookmark-vs2010>`__
- For Instant Client 11.2 install `VS 2005 64-bit <https://www.microsoft.com/en-us/download/details.aspx?id=18471>`__ or `VS 2005 32-bit <https://www.microsoft.com/en-ca/download/details.aspx?id=3387>`__
5. If you intend to co-locate optional Oracle configuration files such
as ``tnsnames.ora``, ``sqlnet.ora`` or ``oraaccess.xml`` with
Instant Client, then create a ``network\admin`` subdirectory, for example
``C:\oracle\instantclient_12_2\network\admin``.
This is the default Oracle configuration directory for executables
linked with this Instant Client.
Alternatively, Oracle configuration files can be put in another,
accessible directory. Then set the environment variable
``TNS_ADMIN`` to that directory name.
Local Database or Full Oracle Client
++++++++++++++++++++++++++++++++++++
cx_Oracle applications can use Oracle Client 18, 12, or 11.2
libraries libraries from a local Oracle Database or full Oracle
Client.
The Oracle libraries must be either 32-bit or 64-bit, matching your
Python architecture.
1. Set the environment variable ``PATH`` to include the path that
contains OCI.dll, if it is not already set. For example, on Windows
7, update ``PATH`` in Control Panel -> System -> Advanced System
Settings -> Advanced -> Environment Variables -> System Variables
-> PATH.
Restart any open command prompt windows.
2. Optional Oracle configuration files such as ``tnsnames.ora``,
``sqlnet.ora`` or ``oraaccess.xml`` can be placed in the
``network/admin`` subdirectory of the Oracle Database software
installation.
Alternatively, Oracle configuration files can be put in another,
accessible directory. Then set the environment variable
``TNS_ADMIN`` to that directory name.
Installing cx_Oracle on macOS
=============================
Install Python
--------------
Make sure you are not using the bundled Python. This has restricted
entitlements and will fail to load Oracle client libraries. Instead
use `Homebrew <https://brew.sh>`__ or `Python.org
<https://www.python.org/downloads>`__.
Install cx_Oracle
-----------------
Use Python's `Pip <http://pip.readthedocs.io/en/latest/installing/>`__
package to install cx_Oracle from `PyPI
<https://pypi.python.org/pypi/cx_Oracle>`__::
python -m pip install cx_Oracle --upgrade
The source will be downloaded, compiled, and the resulting binary
installed.
Install Oracle Instant Client
-----------------------------
cx_Oracle requires Oracle Client libraries, which are found in Oracle
Instant Client for macOS. These provide the necessary network
connectivity allowing cx_Oracle to access an Oracle Database
instance. Oracle Client versions 18, 12 and 11.2 are supported.
To use cx_Oracle with Oracle Instant Client zip files:
1. Download the 18, 12, or 11.2 "Basic" or "Basic Light" zip file from `here
<http://www.oracle.com/technetwork/topics/intel-macsoft-096467.html>`__.
Choose either a 64-bit or 32-bit package, matching your
Python architecture.
2. Unzip the package into a single directory that is accessible to your
application. For example::
mkdir -p /opt/oracle
unzip instantclient-basic-macos.x64-12.2.0.1.0.zip
3. Add links to ``$HOME/lib`` or ``/usr/local/lib`` to enable
applications to find the library. For example::
mkdir ~/lib
ln -s /opt/oracle/instantclient_12_2/libclntsh.dylib.12.1 ~/lib/
Alternatively, copy the required OCI libraries. For example::
mkdir ~/lib
cp /opt/oracle/instantclient_12_2/{libclntsh.dylib.12.1,libclntshcore.dylib.12.1,libons.dylib,libnnz12.dylib,libociei.dylib} ~/lib/
For Instant Client 11.2, the OCI libraries must be copied. For example::
mkdir ~/lib
cp /opt/oracle/instantclient_11_2/{libclntsh.dylib.11.1,libnnz11.dylib,libociei.dylib} ~/lib/
4. If you intend to co-locate optional Oracle configuration files such
as ``tnsnames.ora``, ``sqlnet.ora`` or ``oraaccess.xml`` with
Instant Client, then create a ``network/admin`` subdirectory. For
example::
mkdir -p /opt/oracle/instantclient_12_2/network/admin
This is the default Oracle configuration directory for executables
linked with this Instant Client.
Alternatively, Oracle configuration files can be put in another,
accessible directory. Then set the environment variable
``TNS_ADMIN`` to that directory name.
Install Using GitHub
====================
In order to install using the source on GitHub, use the following commands::
git clone https://github.com/oracle/python-cx_Oracle.git cx_Oracle
cd cx_Oracle
git submodule init
git submodule update
python setup.py install
Note that if you download a source zip file directly from GitHub then
you will also need to download an `ODPI-C
<https://github.com/oracle/odpi>`__ source zip file and extract it
inside the directory called "odpi".
Install Using Source from PyPI
==============================
The source package can be downloaded manually from
`PyPI <https://pypi.python.org/pypi/cx_Oracle>`__ and extracted, after
which the following commands should be run::
python setup.py build
python setup.py install
Upgrading from cx_Oracle 6
==========================
Review the `releasenotes
<http://cx-oracle.readthedocs.io/en/latest/releasenotes.html>`__ for
deprecations and modify any affected code.
Upgrading from cx_Oracle 5
==========================
If you are upgrading from cx_Oracle 5 note these installation changes:
- When using Oracle Instant Client, you should not set ``ORACLE_HOME``.
- On Linux, cx_Oracle 6 no longer uses Instant Client RPMs automatically.
You must set ``LD_LIBRARY_PATH`` or use ``ldconfig`` to locate the Oracle
client library.
- PyPI no longer allows Windows installers or Linux RPMs to be
hosted. Use the supplied cx_Oracle Wheels instead, or use RPMs
from Oracle, see :ref:`oraclelinux`.
Installing cx_Oracle 5.3
========================
If you require cx_Oracle 5.3, download a Windows installer from `PyPI
<https://pypi.python.org/pypi/cx_Oracle>`__ or use ``python -m pip
install cx-oracle==5.3`` to install from source.
Very old versions of cx_Oracle can be found in the files section at
`SourceForce <https://sourceforge.net/projects/cx-oracle/files/>`__.
Troubleshooting
===============
If installation fails:
- Use option ``-v`` with pip. Review your output and logs. Try to install
using a different method. **Google anything that looks like an error.**
Try some potential solutions.
- Was there a network connection error? Do you need to see the environment
variables ``http_proxy`` and/or ``https_proxy``?
- Do you get the error "``No module named pip``"? The pip module is builtin
to Python from version 2.7.9 but is sometimes removed by the OS. Use the
venv module (builtin to Python 3.x) or virtualenv module (Python 2.x)
instead.
- Do you get the error "``fatal error: dpi.h: No such file or directory``"
when building from source code? Ensure that your source installation has a
subdirectory called "odpi" containing files. If missing, review the
section on `Install Using GitHub`_.
If importing cx_Oracle fails:
- Do you get the error "``DPI-1047: Oracle Client library cannot be
loaded``"?
- Check that Python, cx_Oracle and your Oracle Client libraries
are all 64-bit or all 32-bit. The ``DPI-1047`` message will
tell you whether the 64-bit or 32-bit Oracle Client is needed
for your Python.
- On Windows, restart your command prompt and use ``set PATH``
to check the environment variable has the correct Oracle
Client listed before any other Oracle directories.
- On Windows, use the ``DIR`` command on the directory set in
``PATH``. Verify that ``OCI.DLL`` exists there.
- On Windows, check that the correct `Windows Redistributables
<https://oracle.github.io/odpi/doc/installation.html#windows>`__ have
been installed.
- On Linux, check the ``LD_LIBRARY_PATH`` environment variable
contains the Oracle Client library directory.
- On macOS, make sure Oracle Instant Client is in ``~/lib`` or
``/usr/local/lib`` and that you are not using the bundled Python (use
`Homebrew <https://brew.sh>`__ or `Python.org
<https://www.python.org/downloads>`__ instead).
- If you have both Python 2 and 3 installed, make sure you are
using the correct python and pip (or python3 and pip3)
executables.