数据库
首页 > 数据库> > python-cx_Oracle无法识别要在Linux上安装的Oracle软件的安装位置

python-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

在查看了其他一些答案之后(easy_install cx_Oracle (python package) on Windows,https://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文件的位置.

这是我的/ 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安装目录有一点不同-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代码之前再次将其导出,则它们似乎才起作用.

解决方法:

更新

作为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,以获取有关安装和执行使用客户端库的应用程序的一些信息.

标签:oracle,cx-oracle,linux,python
来源: https://codeday.me/bug/20191028/1950535.html