cx_Oracle: distutils.errors.DistutilsSetupError: cannot locate Oracle include files

本小妞迷上赌 提交于 2020-01-01 03:59:07

问题


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?

  1. 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:


  1. Install oracle_client_basic

    oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm
    
  2. Using pip install

    python -m pip install cx_Oracle
    
  3. Adding ldconfig

    1. Find your client location, for example: /u01/app/oracle/product/11.2.0/client_1/lib
    2. vi /etc/ld.so.conf.d/oracle.conf

      Add this location into it:

      /u01/app/oracle/product/11.2.0/client_1/lib
      
    3. ldconfig
  4. 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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!