CX_Oracle libclntsh.so.12.1 的导入错误

CX_Oracle import Error for libclntsh.so.12.1

我在 Ubuntu 16.04 中配置了 Oracle 11g,它工作得很好。

之前我尝试安装 Oracle 12c,但出现了一些错误,所以我删除了它并安装了 11g。

现在,我的问题是,当我尝试在 python 中使用 import cx_Oracle 时,出现 libclntsh.so.12.1.

的导入错误

这是整个输出:

>>> import cx_Oracle
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: libclntsh.so.12.1: cannot open shared object file: No such file or directory

我的 .bashrc 文件有这些条目:

export PATH="/home/marvin/anaconda2/bin:$PATH"
export ORACLE_HOME=/u01/app/oracle/product/11.2.0/xe
export ORACLE_SID=XE
export NLS_LANG=`$ORACLE_HOME/bin/nls_lang.sh`
export ORACLE_BASE=/u01/app/oracle
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
export PATH=$ORACLE_HOME/bin:$PATH

为什么还在尝试Oracle 12c? 11g 配置或 12c 卸载是否有错误?

我已经尝试通过 pip 卸载并重新安装 cx_oracle

运行 ldd 命令正在尝试加载 cx_Oracle 共享库文件。您应该可以使用 "imp" 模块找到正在加载的 cx_Oracle 模块的位置,如下所示:

import imp
imp.find_module("cx_Oracle")

您可能会发现它试图加载的模块位于您意想不到的地方!

此外,当您 运行 命令 pip install cx_Oracle 确认它实际上正在编译以及正在链接哪些文件时。

我希望这些提示之一能够帮助您找出配置问题所在。

调试步骤:

1.在

上找到要执行 ldd 的文件
>>> import imp
>>> imp.find_module("cx_Oracle")
(<_io.BufferedReader name='/opt/data-tools/Anaconda/lib/python3.6/site-packages/cx_Oracle.cpython-36m-x86_64-linux-gnu.so'>, '/opt/data-tools/Anaconda/lib/python3.6/site-packages/cx_Oracle.cpython-36m-x86_64-linux-gnu.so', ('.cpython-36m-x86_64-linux-gnu.so', 'rb', 3))

2。做 ldd

    ldd /opt/data-tools/Anaconda/lib/python3.6/site-packages/cx_Oracle.cpython-36m-x86_64-linux-gnu.so

      libclntsh.so.12.1 => not found
  1. 找到 libclntsh.so.12.1( 或您的案例缺少的任何内容)。

  2. 确保包含 libclntsh.so.12.1 的目录在 LD_LIBRARY_PATH 中。如果路径中没有,请添加。

     export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/oracle/product/12.1.0/lib/
    

5.卸载并安装

    /opt/data-tools/Anaconda/bin/pip uninstall cx_Oracle==5.1.3
    export ORACLE_HOME=/opt/oracle/product/12.1.0 &&  /opt/data-tools/Anaconda/bin/pip install cx_Oracle==5.1.3 --no-cache-dir

6.检查 ldd

    ldd /opt/data-tools/Anaconda/lib/python3.6/site-packages/cx_Oracle.cpython-36m-x86_64-linux-gnu.so
      linux-vdso.so.1 =>  (0x00007ffd89ca2000)
      libclntsh.so.12.1 => /opt/oracle/product/12.1.0/lib/libclntsh.so.12.1 (0x00007f1a3a4ba000)