使用即时客户端通过Python3(cx_Oracle)连接到Oracle数据库时,错误“ DPI-1047:无法找到64位Oracle客户端库”

kasia.b

我正在尝试从在安装了Oracle Instant Client(12.2)的Oracle linux 7计算机上运行的python脚本连接到Oracle数据库。客户端安装似乎很好,我可以

export ORACLE_HOME=/u01/app/oracle/product/12.2.0.1/client
export LD_LIBRARY_PATH="${ORACLE_HOME}/bin:${LD_LIBRARY_PATH}"
$ORACLE_HOME/bin/sqlplus <username>/***@<connection_string>

而且有效。当我在执行python脚本之前导出ORACLE_HOME和LD_LIBRARY_PATH时,该脚本也能正常工作。关键是:我想在python脚本中设置这些变量。我试过了

os.environ["ORACLE_HOME"] = "/u01/app/oracle/product/12.2.0.1/client"

接着

os.environ["LD_LIBRARY_PATH"] = "/u01/app/oracle/product/12.2.0.1/client/bin"

或(周围有一些try-except-block)

os.environ["LD_LIBRARY_PATH"] = "/u01/app/oracle/product/12.2.0.1/client/bin:" + os.environ["LD_LIBRARY_PATH"]

在脚本的开头,但我不断收到类似的错误

DPI-1047: Cannot locate a 64-bit Oracle Client library: "libmql1.so: cannot open shared object file: No such file or directory".

在设置数据库连接之前,我还让python脚本打印了LD_LIBRARY变量-它显示了正确的值。在我看来,变量的“导出”某种程度上是行不通的,就好像Oracle客户端的调用没有获得正确的数据一样。

如果您有任何想法我可以尝试或测试,请不要犹豫在此处编写。我很高兴收到有关该问题的新意见。问候,

卡塔琳娜(Katharina)

PS:是的,我知道,我不应该在没有安装真正Oracle主目录的服务器上设置ORACLE_HOME。请不要专注于此。

安东尼·图宁加

环境变量LD_LIBRARY_PATH当过程启动后检查。您无法在过程中设置该值,并且期望在搜索Oracle客户端库时可以检查该值。

如果您不想设置LD_LIBRARY_PATH环境变量,则有几种选择您可以:

  • 添加/etc/ld.so.conf配置Oracle客户端库的位置。将为机器的所有用户配置
  • 创建一个设置LD_LIBRARY_PATH并调用您的Python程序的脚本,然后调用该脚本而不是您的Python程序
  • 尽管在技术上不支持此功能,但它确实可以工作-使用chrpathpatchelf更改RPATHOracle Client Library的位置,使其成为找到它的位置或值$ORIGIN完成此操作后,您可以cx_Oracle.init_oracle_client()直接指定该位置

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

Related 相关文章

热门标签

归档