我已经成功地在我的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 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文件的位置。
这是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代码之前再次导出它们时,它们才看起来是功能性的。
当我试图在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
:阅读本documentation了解有关安装和执行使用客户端库的应用程序的一些信息。
相关问题 更多 >
编程相关推荐