Python 程序無法找到 Oracle 的 64 位客戶端庫 (libclntsh.so)

數據庫錯誤: DPI-1047: Cannot locate a 64-bit Oracle Client library: "libclntsh.so: cannot open shared object file: No such file or directory". See https://oracle.github.io/odpi/doc/installation.html#linux for help

這個錯誤表明 Python 程序無法找到 Oracle 的 64 位客戶端庫 (libclntsh.so)。以下是完整的解決方案:


完整解決方案(Linux 環境)

1. 安裝 Oracle Instant Client(推薦方式)

(1) 下載 Oracle Instant Client Basic 包

從 Oracle 官網下載?19c?或?21c?版本的 Basic 包:

bash

# 進入下載目錄(如 /opt/oracle)
sudo mkdir -p /opt/oracle
cd /opt/oracle# 下載 Basic 包(示例為 19.19 版本)
wget https://download.oracle.com/otn_software/linux/instantclient/199000/instantclient-basic-linux.x64-19.9.0.0.0dbru.zip# 解壓
sudo unzip instantclient-basic-linux.x64-19.9.0.0.0dbru.zip

如果?wget?報錯,可手動從?Oracle 官網?下載并上傳到服務器。

(2) 設置環境變量

bash

# 臨時生效(當前會話)
export LD_LIBRARY_PATH=/opt/oracle/instantclient_19_9# 永久生效(寫入 ~/.bashrc 或 /etc/profile)
echo 'export LD_LIBRARY_PATH=/opt/oracle/instantclient_19_9' >> ~/.bashrc
source ~/.bashrc
(3) 創建符號鏈接(關鍵步驟!)

bash

sudo ln -s /opt/oracle/instantclient_19_9/libclntsh.so.19.1 /usr/lib/libclntsh.so

sudo yum install libnsl


2. 驗證是否生效

bash

# 檢查庫文件是否存在
ls -l /opt/oracle/instantclient_19_9/libclntsh.so*# 檢查環境變量
echo $LD_LIBRARY_PATH# 測試 Python 是否能導入 cx_Oracle
python3 -c "import cx_Oracle; print('Success')"

如果沒有報錯,說明配置成功!


3. 在你的 Python 代碼中強制指定 Oracle 客戶端路徑

如果仍然報錯,可以在代碼中顯式指定 Oracle 客戶端路徑:

python

import cx_Oracle# 手動指定 Oracle 客戶端路徑
cx_Oracle.init_oracle_client(lib_dir="/opt/oracle/instantclient_19_9")# 然后正常連接數據庫
conn = cx_Oracle.connect("DB_MON/db_mon@rpt2.fastfish.com.cn:1521/orcl")

4. 其他可能的問題

(1) 32 位 vs 64 位不匹配
  • 確保 Python 和 Oracle Instant Client 都是?64 位

    bash

    # 檢查 Python 位數
    python3 -c "import sys; print(sys.maxsize > 2**32)"
    • 輸出?True?表示 64 位 Python。

  • 檢查 Oracle Instant Client 位數:

    bash

    file /opt/oracle/instantclient_19_9/libclntsh.so
    • 應顯示?ELF 64-bit

(2) 缺少?libaio?依賴

bash

# CentOS/RHEL
sudo yum install libaio# Ubuntu/Debian
sudo apt-get install libaio1
(3) 文件權限問題

確保當前用戶有權訪問 Oracle Instant Client:

bash

sudo chmod -R +r /opt/oracle/instantclient_19_9

5. 最終代碼示例

python

import cx_Oracle
import os# 設置 Oracle 客戶端路徑(可選)
os.environ["LD_LIBRARY_PATH"] = "/opt/oracle/instantclient_19_9"# 顯式初始化 Oracle 客戶端
cx_Oracle.init_oracle_client(lib_dir="/opt/oracle/instantclient_19_9")# 連接數據庫
try:conn = cx_Oracle.connect("DB_MON/db_mon@rpt2.fastfish.com.cn:1521/orcl")print("連接成功!")conn.close()
except Exception as e:print("連接失敗:", e)

總結

問題解決方案
DPI-1047?錯誤安裝 Oracle Instant Client 并設置?LD_LIBRARY_PATH
libclntsh.so?找不到檢查路徑并創建符號鏈接
32/64 位不匹配確保 Python 和 Oracle 客戶端都是 64 位
缺少?libaio安裝?libaioyum install libaio?或?apt install libaio1
權限問題確保?/opt/oracle?可讀

如果仍然報錯,請檢查:

  1. 是否下載了正確版本的 Instant Client?

  2. LD_LIBRARY_PATH?是否生效?

  3. 是否執行了?source ~/.bashrc

希望這能徹底解決問題! 🚀

方法1:直接通過命令修改(臨時生效)

bash

export LD_LIBRARY_PATH=/opt/oracle/instantclient_19_9
方法2:永久修改(編輯.bashrc文件)
  1. 打開.bashrc文件:

bash

nano ~/.bashrc
  1. 找到設置LD_LIBRARY_PATH的行(可能是這樣的):

bash

export LD_LIBRARY_PATH=/opt/oracle/instantclient_19_9:/opt/oracle/instantclient_19_9:
  1. 修改為(刪除重復路徑和結尾冒號):

bash

export LD_LIBRARY_PATH=/opt/oracle/instantclient_19_9
  1. 保存退出nano:

  • 按?Ctrl+O?保存

  • 按?Enter?確認

  • 按?Ctrl+X?退出

  1. 使修改生效:

bash

source ~/.bashrc

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/89847.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/89847.shtml
英文地址,請注明出處:http://en.pswp.cn/web/89847.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Kubernetes常用命令總結

文章目錄Kubernetes常用命令總結1. 集群管理命令kubectl cluster-infokubectl get nodeskubectl describe node <node-name>kubectl top nodes2. Pod相關命令kubectl get podskubectl get pods -o widekubectl describe pod <pod-name>kubectl logs <pod-name&g…

roboflow使用教程

如何利用roboflow標注自己的訓練集、調用開源數據集 官網&#xff1a;Roboflow: Computer vision tools for developers and enterprises&#xff08;國內代理進不去&#xff09; 先注冊登陸進去 訓練自己的數據集 點擊“New Project”,名字按照自己的需求來 我不想寫了&am…

IDEA中使用Tomcat兩種方式

Catalogue1 集成本地Tomcat2 Tomcat Maven插件&#xff08;推薦&#xff09;1 集成本地Tomcat 將本地Tomcat集成到Idea中&#xff0c;然后進行項目部署即可 點擊編輯配置 點擊加號 添加local的Tomcat 配置Application Server 可以修改一下Name 至此&#xff0c;配置完成 …

服務器上的文件復制到本地 Windows 系統

在 Windows 上通過 SSH 連接到 Linux 服務器后&#xff0c;如果需要將服務器上的文件復制到本地 Windows 系統&#xff0c;可以使用以下幾種方法&#xff1a;方法 1&#xff1a;使用 scp&#xff08;Secure Copy&#xff09;命令 scp&#xff08;基于 SSH 的安全復制&#xff0…

大語言模型置信度增強實戰指南

LLM怎么簡單增強置信度 在大語言模型(LLM)的應用中,“置信度增強”核心目標是提升模型輸出的可靠性(減少錯誤/幻覺) 并讓模型更清晰地表達自身的不確定性(避免“一本正經地胡說”)。常用方式可分為“輸出優化”“知識補充”“校準調整”三大類, 一、基于“推理過程優…

NLP:人名分類器案例分享

本文目錄&#xff1a;一、案例介紹&#xff08;一&#xff09;關于人名分類&#xff08;二&#xff09;人名分類數據預覽二、案例步驟&#xff08;一&#xff09;導入工具包&#xff08;二&#xff09;數據預處理1. 獲取常用的字符數量2. 國家名種類數和個數3.讀數據到內存4.構…

3分鐘實戰!用DeepSeek+墨刀AI生成智能對話APP原型圖

如今&#xff0c;AI生成原型圖已經逐漸成為產品經理的一項常用輔助技能&#xff0c;不僅能加快設計進程&#xff0c;還能顯著提升前期溝通效率。最近我嘗試將大語言模型工具與AI原型工具結合測試&#xff0c;目標是看看是否能生成更高質量的原型頁面。直到我使用DeepSeek墨刀AI…

CentOS網絡配置與LAMP環境搭建指南

一、CentOS配置網絡1、查看網卡名稱ifconfig2、找到網卡對應配置文件網卡存放路徑 &#xff1a;/etc/sysconfig/network-scriptscd /etc/sysconfig/network-scripts3、修改網卡對應配置文件使用 vi/vim 打開文件&#xff0c;查看以下內容vim ifcfg-ens33將ONBOOTno 改為 ONBOOT…

TinyMCE 富文本編輯器在 vue2 中的使用 @tinymce/tinymce-vue

TinyMCE是一款功能強大、高度可定制的富文本編輯器。官方文檔 TinyMCE DOCS tinymce-vue包的版本4及更高版本支持Vue.js 3。但不支持Vue.js 2.x。對于Vue.js 2。X應用程序&#xff0c;使用tinymce-vue版本3。 安裝TinyMCE和Vue集成包 npm install tinymce/tinymce-vue3 tiny…

LP-MSPM0G3507學習--04GPIO控制

關鍵函數&#xff1a; DL_GPIO_readPins(GPIO_Regs* gpio, uint32_t pins):同時讀一組端口DL_GPIO_writePins(GPIO_Regs* gpio, uint32_t pins)&#xff1a;同時寫一組端口DL_GPIO_setPins(GPIO_Regs* gpio, uint32_t pins)&#xff1a;對指定某組端口的某管腳置高DL_GPIO_cle…

LVS(Linux virtual server)-實現四層負載均衡

一、簡介LVS:Linux Virtual Server&#xff0c;負載調度器&#xff0c;內核集成&#xff0c;章文嵩&#xff0c;阿里的四層SLB(Server LoadBalance)是基 于LVSkeepalived實現LVS 官網: http://www.linuxvirtualserver.org/二、LVS運行原理2.1LVS 的集群結構2.2lvs相關概念RS&am…

Kubernetes CNI網絡插件性能瓶頸排查與優化實踐

Kubernetes CNI網絡插件性能瓶頸排查與優化實踐 CNI&#xff08;Container Network Interface&#xff09;是 Kubernetes 網絡層的核心組件&#xff0c;不同 CNI 插件實現了容器間網絡通信、多租戶隔離、流量限速等功能。然而在大規模集群或高并發業務場景下&#xff0c;CNI 插…

20250720-6-Kubernetes 調度-nodeName字段,DaemonS_筆記

一、污點與容忍&#xfeff;1. 給節點添加污點&#xfeff;1&#xff09;命令格式基本語法&#xff1a;kubectl taint node [node] keyvalue:[effect]示例&#xff1a;kubectl taint node k8s-node1 gpuyes:NoSchedule操作說明&#xff1a;與打標簽命令類似&#xff0c;將"…

微軟開源項目 Detours 詳細介紹與使用實例分享

目錄 1、Detours概述 2、Detours功能特性 3、Detours工作原理 4、Detours應用場景 5、Detours兼容性 6、Detours具體使用方法 7、Detours使用實例 - 使用Detours攔截系統庫中的UnhandledExceptionFilter接口,實現對程序異常的攔截 C++軟件異常排查從入門到精通系列教程…

研發知識系統選型實戰:從 Notion 到 Gitee Wiki 的迭代經驗

關鍵詞&#xff1a;知識管理、版本控制、協作編輯、國產平臺、研發效能 在日常研發管理中&#xff0c;知識管理平臺往往被視為“非核心工具”&#xff0c;但它的好壞直接影響著團隊交接效率、文檔可用性以及協作深度。過去幾年&#xff0c;我們團隊先后使用過 Notion、Confluen…

從一開始的網絡攻防(三):sqlmap快速上手

一、確定目標 使用sqlmap的第一步是確定探測的目標&#xff0c;一般有四種&#xff1a; 數據庫URL文件Google批量掃 環境 Target IP: 192.168.8.133 Port: 13306(Mysql)、8088(sqli_labs) mysql&#xff1a; docker pull的最新mysql sqlmap github&#xff1a;https://g…

《Anaconda 精簡路徑治理》系列 · 番外篇Conda 虛擬環境路徑結構方案全解——六種路徑布局對比、優劣與治理建議

Python 多版本環境治理理念驅動的系統架構設計&#xff1a;三維治理、四級隔離、五項自治 原則-CSDN博客 Anaconda 路徑精簡后暴露 python 及工具到環境變量的配置記錄-CSDN博客 【終極實戰】Conda/Poetry/Virtualenv/Pipenv/Hatch 多工具協同 AnacondaPyCharm&#xff1a;構建…

容器基礎知識3-kubectl、kubeadm 和 kubelet,kube-proxy

kubectl、kubeadm 和 kubelet&#xff0c;kube-proxy的概念和關系一、kubeadm&#xff1a;K8s 集群的 “搭建工程師”核心定位如果把 K8s 集群比作一棟大樓&#xff0c;kubeadm 就是負責 “打地基、搭框架” 的工程師&#xff0c;專門用來快速搭建 K8s 集群的工具。具體工作內容…

langchain調用本地ollama語言模型和嵌入模型

參考&#xff1a;ollama兼容OpenAIEmbeddings的解決思路 解決代碼&#xff1a; 訪問embedding模型代碼 # 測試以下兩個引用都可以 from langchain_openai import OpenAIEmbeddings #from langchain_community.embeddings import OpenAIEmbeddings from typing import List,…

gitlab私有化部署

以下是整理好的Markdown格式文檔&#xff0c;詳細描述了從下載鏡像、啟動鏡像、修改external_url以及設置或重置root密碼的步驟。 GitLab 安裝與配置指南 本文檔將指導您完成GitLab的安裝和基本配置過程&#xff0c;包括下載鏡像、啟動容器、修改外部訪問URL(external_url)及設…