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

时间:2015-06-19 00:45:56

标签: python linux oracle cx-oracle

我已经能够在我的Windows 8笔记本电脑上成功安装cx_Oracle以用于Python 3.4,而我现在正试图在Linux机器上获得相同的设置(使用Python 3.4的cx_Oracle)。从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

我看了一些其他答案(easy_install cx_Oracle (python package) on Windowshttps://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版本的即时客户端安装是否应该有不同的文件?

使用部分解决方案进行更新:

我找到了一个正确安装cx_Oracle的解决方案,但仅限于该shell实例:

我设置了这两个环境变量:

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

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

ln -s libclntsh.so.12.1 libclntsh.so

之后,转到cx_oracle文件夹并执行此操作:

python3 setup.py build
python3 setup.py install

出于某种原因,sudo python3 setup.py install无效。

更新并提供相关问题的链接:

我的下一个问题是让环境变量在shell实例之外持久化,所以我不必每次都定义环境变量。我在profile.d中放置的环境变量在我回显它们时出现,但是python无法正确导入cx_oracle,并且由于某种原因我必须再次导出环境变量。我不知道发布与之相关的其他问题的正确程序,所以我在这里开了一个新问题:

Linux profile.d environment variables don't work with cx_oracle in Python

请帮我解决这个问题,我觉得完全不知道该怎样才能让它发挥作用。当我回显它们时,环境变量会显示出来,但是如果我在运行python代码之前再次导出它们,它们似乎只能起作用。

2 个答案:

答案 0 :(得分:4)

<强>更新

作为Petriborg suggested,在构建时设置Option Explicit Sub bar() Dim ie As New InternetExplorer Dim doc As HTMLDocument Dim result As IHTMLElement Dim result2 As IHTMLElement Dim item As String Dim lRow As Long ie.Visible = True lRow = 2 item = Sheet1.Range("A" & lRow).Value Do Until item = "" ie.navigate "http://www.buyshedsdirect.co.uk/" & item Do DoEvents Loop Until ie.readyState = READYSTATE_COMPLETE Set doc = ie.document Set result = doc.querySelector(".VariantPrice") Set result2 = result.querySelector(".NowValue") Sheet1.Range("B" & lRow).Value = result2.innerText lRow = lRow + 1 item = Sheet1.Range("A" & lRow).Value Loop ie.Quit End Sub 将包括安装期间构建的LD_RUN_PATH共享库中Oracle共享库文件的路径。这就像我在第一个答案中所建议的那样,不需要cx_Oracle

对于您使用的RPM,LD_LIBRARY_PATH应设置为ORACLE_HOME。如果您使用/usr/lib/oracle/12.1/client

pip

阅读此documentation以获取有关安装和执行使用客户端库的应用程序的一些信息。

答案 1 :(得分:0)

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