![](/img/trans.png)
[英]cx_Oracle error. DPI-1047: Cannot locate a 64-bit Oracle Client library
[英]Error “DPI-1047: Cannot locate a 64-bit Oracle Client library” when connecting to Oracle Database with Python3 (cx_Oracle) using instant client
我正在嘗試從安裝了 Oracle 即時客戶端 (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 客戶端的調用沒有得到正確的數據一樣。
如果您對我可以嘗試或測試的內容有任何想法,請不要猶豫,寫在這里。 我很高興在這個問題上得到新的投入。 問候,
卡特琳娜
PS:是的,我知道,我不應該在沒有安裝真正的 Oracle 主目錄的服務器上設置 ORACLE_HOME。 請不要專注於此。
環境變量LD_LIBRARY_PATH
僅在進程啟動時檢查。 您不能在進程中設置該值並期望在搜索 Oracle 客戶端庫時檢查它。
如果您不想設置LD_LIBRARY_PATH
環境變量,您有幾個選擇。 你可以:
/etc/ld.so.conf
配置中。 這將為機器的所有用戶配置LD_LIBRARY_PATH
的腳本,然后調用您的 Python 程序並調用該腳本而不是您的 Python 程序chrpath
或patchelf
將 Oracle 客戶端庫的RPATH
更改為找到它的位置或$ORIGIN
值。 完成此操作后,您可以使用cx_Oracle.init_oracle_client()
直接指定該位置
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.