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
找到 libclntsh.so.12.1( 或您的案例缺少的任何内容)。
确保包含 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)
我在 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
找到 libclntsh.so.12.1( 或您的案例缺少的任何内容)。
确保包含 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)