python - Linux。连接到 Oracle。 cx_Oracle.DatabaseError : DPI-1047 Cannot locate a 64-bit Oracle Client library: "libclntsh. 所以

标签 python linux oracle cx-oracle

我遇到错误“cx_Oracle.DatabaseError:DPI-1047:无法找到 64 位 Oracle 客户端库:“libclntsh.so:无法打开共享对象文件:没有这样的文件或目录”。请参阅 https://oracle.github.io/odpi/doc/installation.html#linux 获取帮助”

我看到了https://oracle.github.io/odpi/doc/installation.html#oracle-instant-client-zipHow to fix: cx_Oracle.DatabaseError: DPI-1047: Cannot locate a 64-bit Oracle Client library - Python

我一直在Windows上工作,只学习Linux系统。我需要帮助解决这个问题。从 python 连接到 Oracle:

import cx_Oracle
con = cx_Oracle.connect('<USER>/<PASSWORD>@<HOST>:<PORT>/<SID>')

我从未从 Linux 连接过。这是第一次。

user@postgresql:~/opt$ cd oracle
user@postgresql:~/opt/oracle$ unzip instantclient-basic-linux.x64-12.2.0.1.0.zip
Archive:  instantclient-basic-linux.x64-12.2.0.1.0.zip
inflating: instantclient_12_2/adrci  
inflating: instantclient_12_2/BASIC_README  
inflating: instantclient_12_2/genezi  
inflating: instantclient_12_2/libclntshcore.so.12.1  
inflating: instantclient_12_2/libclntsh.so.12.1  
inflating: instantclient_12_2/libipc1.so  
inflating: instantclient_12_2/libmql1.so  
inflating: instantclient_12_2/libnnz12.so  
inflating: instantclient_12_2/libocci.so.12.1  
inflating: instantclient_12_2/libociei.so  
inflating: instantclient_12_2/libocijdbc12.so  
inflating: instantclient_12_2/libons.so  
inflating: instantclient_12_2/liboramysql12.so  
inflating: instantclient_12_2/ojdbc8.jar  
inflating: instantclient_12_2/uidrvci  
inflating: instantclient_12_2/xstreams.jar
user@postgresql:~$ sudo apt install libaio1
user@postgresql:/etc/ld.so.conf.d$ sudo nano oracle-instantclient.conf
user@postgresql:/etc/ld.so.conf.d$ sudo ldconfig
user@postgresql:/etc/ld.so.conf.d$ sudo export 
LD_LIBRARY_PATH=/opt/oracle/instantclient_12_2:$LD_LIBRARY_PATH

Linux

user@postgresql:~$ cat /proc/version
Linux version 5.3.0-46-generic (buildd@lgw01-amd64-003) (gcc version 9.2.1 20191008 (Ubuntu 9.2.1-9ubuntu2)) #38-Ubuntu SMP Fri Mar 27 17:37:05 UTC 2020

最佳答案

对于 WSL Ubuntu

  1. 您将从 https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html 下载适用于 Linux 的 instantclient-basic 和 instantclient-sqlplus 的 zip 版本
  2. 创建一个名为/opt/oracle 的文件夹
sudo mkdir -p /opt/oracle
cd /opt/oracle/
  • 现在安装 zip 和 libaio1
  • apt-get install zip libaio1
    cd /opt/oracle/
    
  • 将 instantclient basic 和 sqlplus 版本解压到创建的 oracle 文件夹中。
  • unzip /location/to/your/download/instantclient-basic-linux.x64-12.2.0.1.0.zip
    unzip /location/to/your/download/instantclient-sqlplus-linux.x64-12.2.0.1.0.zip
    
  • 将目录更改为 instantclient_12_2
  • cd instantclient_12_2/
    
  • 运行以下命令
  • ln -s libclntsh.so.12.1 libclntsh.so
    ln -s libocci.so.12.1 libocci.so
    
  • 编辑 .bashrc 文件以设置 oracle 主目录。
  • sudo nano $HOME/.bashrc
    
  • 将以下行添加到 .bashrc 末尾
  • # set oracle home at the end of the file
    export ORACLE_HOME=/opt/oracle/instantclient_12_2
    export LD_LIBRARY_PATH=$ORACLE_HOME:$LD_LIBRARY_PATH
    export PATH=$ORACLE_HOME:$PATH
    
  • 并且
  • source $HOME/.bashrc
    
  • 最后,安装cx_Oracle
  • 关于python - Linux。连接到 Oracle。 cx_Oracle.DatabaseError : DPI-1047 Cannot locate a 64-bit Oracle Client library: "libclntsh. 所以,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61158053/

    相关文章:

    java - jackson 在 momentJS 中使用的奇怪时间戳值给出了错误的年份

    python - 使用 for 循环构建 NumPy 数组(列表的列表?)

    python - Python 类在哪里存储参数?

    c++ - 静态库中的 PIC 性能

    c - free() 由 system() 使用的缓冲区

    php - 如何使用命令行访问linux服务器上的php.ini

    sql - 为什么 Oracle 返回无效月份错误

    oracle - 在 PL/SQL Developer 中直接从一个包体跳转到另一个包体

    python - Django 中的 SQL 查询问题

    python - Python:OpenCv函数cvHaarDetectObjects返回什么?