我已经能够在 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
根据我查看的其他一些答案(Windows 上的 easy_install cx_Oracle(python 包) https://stackoverflow.com/questions/11245985/easy-install-cx-oracle-python-package-on-windows?lq=1, https://gist.github.com/jarshwah/3863378 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 安装目录有点不同 - 那个目录有.dll
and .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 环境变量不适用于 Python 中的 cx_oracle https://stackoverflow.com/questions/31009151/linux-profile-d-environment-variables-dont-work-with-cx-oracle-in-python
请帮助我解决这个问题,我感觉完全陷入了如何使其发挥作用的困境中。当我回显环境变量时,它们就会显示出来,但只有在运行 python 代码之前再次导出它们时,它们似乎才起作用。