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

2024-05-19 08:37:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经成功地在我的Windows 8笔记本电脑上安装了用于Python 3.4的cx_Oracle,现在我正试图在Linux机器上安装相同的设置(cx_Oracle with python3.4)。从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个即时客户端RPM:

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文件的位置。

这是my/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代码之前再次导出它们时,它们才看起来是功能性的。


Tags: install文件pyhomesosetup环境变量plus
2条回答

当我试图在Ubuntu 16.04 with python 2.7.12和Oracle client 12.1.0.2中单独安装带有LD_LIBRARY_PATH变量的cx_Oracle时,pip安装失败,正在查找Oracle 12.1.0.2 client中不再可用的头文件。它与LDúRUNúPATH一起工作

已更新

作为Petriborg suggested,在生成时设置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

阅读本documentation了解有关安装和执行使用客户端库的应用程序的一些信息。

相关问题 更多 >

    热门问题