libclntsh.so.12.1的CX_Oracle导入错误

时间:2016-12-16 01:19:27

标签: python oracle oracle11g importerror cx-oracle

我在Ubuntu 16.04中配置了 Oracle 11g ,其工作正常。

之前我尝试安装Oracle 12c,这会出现一些错误,因此我将其删除并安装了11g。

现在,我的问题是当我尝试在import cx_Oracle中使用python时,它会为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卸载中是否有错误?

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

2 个答案:

答案 0 :(得分:5)

在尝试加载的cx_Oracle共享库文件上运行ldd命令。你应该可以使用&#34; imp&#34;模块,用于查找正在加载的cx_Oracle模块的位置,如下所示:

import imp
imp.find_module("cx_Oracle")

你可能会发现它试图加载的模块是在你没想到的地方找到的!

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

我希望其中一个提示可以帮助您弄清楚配置的问题。

答案 1 :(得分:0)

调试步骤:

1。查找要执行操作的文件

>>> 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。做ddd

    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)