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