问题
I need install cx_Oracle for Python 2.5 on Linux (Linux 2.6.18-371.1.2.el5 i686). I have installed Oracle client 10.2.0.4.
I have tried following:
1. Download cx_Oracle tar.gz
from http://sourceforge.net/projects/cx-oracle/files/
.
I don't know which of listed version are suitable for python 2.5 and Oracle client 10.2.0.4, so try cx_Oracle-5.1.tar.gz. Unpacked tar,
go to unpacked folder and run python setup.py install. I got error:
Traceback (most recent call last):
File "setup.py", line 187, in <module>
raise DistutilsSetupError("cannot locate Oracle include files")
distutils.errors.DistutilsSetupError: cannot locate Oracle include files
In .bash_profile I have setted oracle path:
export ORACLE_HOME=/usr/oracle/10.2.0.4/client
export PATH=$ORACLE_HOME/bin
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
How fix such error, maybe I need another version of cx_Oracle tar?
- Run pip install cx_Oracle. Got error:
Downloading/unpacking cx-Oracle
Cannot fetch index base URL https://pypi.python.org/simple/
Could not find any downloads that satisfy the requirement cx-Oracle
No distributions at all found for cx-Oracle
Could someone advise me right solution?
Update After suggestion in response I got following error:
...
cx_Oracle.c:496: warning: passing argument 3 of âPyModule_AddIntConstantâ makes integer from pointer without a cast
cx_Oracle.c:497: error: âOCI_UCBTYPE_EXITâ undeclared (first use in this function)
cx_Oracle.c:497: warning: passing argument 3 of âPyModule_AddIntConstantâ makes integer from pointer without a cast
cx_Oracle.c:498: error: âOCI_UCBTYPE_REPLACEâ undeclared (first use in this function)
cx_Oracle.c:498: warning: passing argument 3 of âPyModule_AddIntConstantâ makes integer from pointer without a cast
error: command 'gcc' failed with exit status 1
回答1:
When you run setup.py it will check for any of these folders on your ORACLE_HOME.
possibleIncludeDirs = ["rdbms/demo", "rdbms/public", "network/public",
"sdk/include"]
Also the instant client sometimes places the include files, such as oci.h, in /usr/include/oracle//client, if there is no 'include' directory under ORACLE_HOME create a symbolic link to it.
sudo ln -s /usr/include/oracle/11.2/client $ORACLE_HOME/include
Looks like you're missing the Client SDK
回答2:
Make sure you install the instant client sdk for you OS.
http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html
回答3:
Install
oracle_client_basic
oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm
Using pip install
python -m pip install cx_Oracle
Adding ldconfig
- Find your client location, for example:
/u01/app/oracle/product/11.2.0/client_1/lib
vi /etc/ld.so.conf.d/oracle.conf
Add this location into it:
/u01/app/oracle/product/11.2.0/client_1/lib
ldconfig
- Find your client location, for example:
import cx_oracle
回答4:
Make sure that you've a client sdk present in your path.
Also I had to do add this to my .bash_rc
export DYLD_LIBRARY_PATH=$ORACLE_HOME
In addition to this, Python 2.7 does not come with Python.h which is available by default in Python 3.4. So I would also suggest to install python-devel package
yum install python-devel
That should resolve the issue.
来源:https://stackoverflow.com/questions/24549911/cx-oracle-distutils-errors-distutilssetuperror-cannot-locate-oracle-include-fi