我正在尝试从在安装了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程序chrpath
或patchelf
更改RPATH
Oracle Client Library的位置,使其成为找到它的位置或值$ORIGIN
。完成此操作后,您可以cx_Oracle.init_oracle_client()
直接指定该位置本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句