簡體   English   中英

使用即時客戶端通過 Python3 (cx_Oracle) 連接到 Oracle 數據庫時出現錯誤“DPI-1047:無法找到 64 位 Oracle 客戶端庫”

[英]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環境變量,您有幾個選擇。 你可以:

  • 將 Oracle 客戶端庫的位置添加到/etc/ld.so.conf配置中。 這將為機器的所有用戶配置
  • 創建一個設置LD_LIBRARY_PATH的腳本,然后調用您的 Python 程序並調用該腳本而不是您的 Python 程序
  • 盡管這在技術上不受支持,但它確實有效——使用chrpathpatchelf將 Oracle 客戶端庫的RPATH更改為找到它的位置或$ORIGIN值。 完成此操作后,您可以使用cx_Oracle.init_oracle_client()直接指定該位置

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM