cx_Oracle无法识别在Linux上安装Oracle软件安装的位置

我已经能够在我的Windows 8笔记本电脑上成功安装cx_Oracle以便与Python 3.4一起使用,现在我正尝试将相同的设置(Python 3.4中的cx_Oracle)安装到Linux机器上。 当从cx_Oracle-5.1.3.tar.gz运行setup.py文件时,最终出现这个错误:

sudo python3 setup.py install Traceback (most recent call last): File "setup.py", line 135, in <module> raise DistutilsSetupError("cannot locate an Oracle software " \ distutils.errors.DistutilsSetupError: cannot locate an Oracle software installation 

我看了一些其他的答案( 在Windows上easy_install cx_Oracle(python包) , https://gist.github.com/jarshwah/3863378 )我已经安装了这3个即时客户端rpms:

 rpm -ivh oracle-instantclient12.1-basic-12.1.0.2.0-1.i386.rpm rpm -ivh oracle-instantclient12.1-devel-12.1.0.2.0-1.i386.rpm rpm -ivh oracle-instantclient12.1-sqlplus-12.1.0.2.0-1.i386.rpm 

然后我将ORACLE_HOME设置为安装到的文件夹,这应该可以帮助python确定oracle文件的位置,以便正确安装。

每次我尝试运行setup.py文件时,仍然出现“找不到Oracle软件安装”的错误。

任何想法我需要做什么才能成功安装cx_oracle?

更新信息:

echo $ ORACLE_HOME返回/instantclient_12_1 ,这是rpm文件安装到的地方。

这是我的/ instantclient_12_1目录的内容:

 adrci libnnz12.so libsqlplusic.so tnsnames.ora BASIC_README libocci.so libsqlplus.so tnsnames.ora_andy genezi libocci.so.12.1 ojdbc6.jar uidrvci glogin.sql libociei.so ojdbc7.jar xstreams.jar libclntshcore.so.12.1 libocijdbc12.so sdk libclntsh.so libons.so sqlplus libclntsh.so.12.1 liboramysql12.so SQLPLUS_README 

这与我的Windows 8安装目录有点不一样,那个目录有.dll.sym文件,比如orasql12.dll 。 即时客户端安装的Linux版本是否有不同的文件?

更新部分解决scheme:

我发现一个正确安装cx_Oracle的解决scheme,但只在该shell实例中:

我设置了这两个环境variables:

 export ORACLE_HOME=/instantclient_12_1 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME 

然后我创build了一个符号链接:

 ln -s libclntsh.so.12.1 libclntsh.so 

之后,转到cx_oracle文件夹,并做到这一点工作:

 python3 setup.py build python3 setup.py install 

出于某种原因, sudo python3 setup.py install不起作用。

更新并附有相关问题的链接:

我的下一个问题是让环境variables在shell实例外持久化,所以我不必每次都定义环境variables。 我把它放在profile.d中的环境variables显示出来,但是python无法正确地导入cx_oracle,并且出于某种原因我必须再次导出环境variables。 我不知道如何发布一个不同的问题,所以我在这里提出了一个新的问题:

Linux profile.d环境variables不适用于Python中的cx_oracle

请帮我解决这个问题,我觉得完全停留在试图让它工作的东西上。 当我回显它们时,环境variables会显示出来,但是如果我在运行python代码之前再次导出它们,它们似乎只能起作用。

更新

正如Petriborg所建议的 ,在构建时设置LD_RUN_PATH将包含安装期间生成的cx_Oracle共享库中的Oracle共享库文件的路径。 这消除了对我的第一个答案中所建议的LD_LIBRARY_PATH的需求。


对于您正在使用的RPM,应将ORACLE_HOME设置为/usr/lib/oracle/12.1/client 。 如果您使用的是pip

 $ export ORACLE_HOME=/usr/lib/oracle/12.1/client $ export LD_RUN_PATH=/usr/lib/oracle/12.1/client/lib:$LD_RUN_PATH $ pip install cx_Oracle $ python -c 'import cx_Oracle; print(cx_Oracle.version)' 5.1.3 

阅读本文档以获取有关安装和执行使用客户端库的应用程序的信息。

当我尝试在Ubuntu 16.04中使用LD_LIBRARY_PATH变量单独安装cx_Oracle时,python 2.7.12和Oracle客户端12.1.0.2 pip安装失败,并且正在寻找Oracle 12.1.0.2客户端无法使用的头文件。 它适用于LD_RUN_PATH