1

我在 CentOS 6.2 上安装了 cx_Oracle。当我从 shell 导入库时,它工作正常,但是当我通过 wsgi 启动它时,我收到错误:

ImportError: libclntsh.so.10.1: cannot open shared object file: No such file or directory

这是一个环境变量问题:cx_Oracle 没有找到 lib 的路径。

我已经尝试过这里提供的解决方案

我在 /usr/lib 目录中添加了指向 libclntsh.so.10.1(带有 ln)的链接

我已经编辑了 apache 配置并添加了:

ORACLE_HOME=/usr/lib/oracle/11.2/client64/lib
LD_LIBRARY_PATH=$ORACLE_HOME/
PATH=$ORACLE_HOME/bin:$PATH

我编辑了 /etc/ld.so.conf 并添加了:

/usr/lib/oracle/11.2/client64/lib

在 ldconfig 之后完成

我尝试将python与:

os.env['ORACLE_HOME']='/usr/lib/oracle/11.2/client64/lib'

我编辑了 bashrc:

export ORACLE_HOME=/usr/lib/oracle/11.2/client64/lib
export LD_LIBRARY_PATH=$ORACLE_HOME/
export PATH=$ORACLE_HOME/bin:$PATH

我还编辑了 apachectl

ORACLE_HOME=/usr/lib/oracle/11.2/client64/lib
export ORACLE_HOME
LD_LIBRARY_PATH=$ORACLE_HOME/
export LD_LIBRARY_PATH
PATH=$ORACLE_HOME/bin:$PATH
export PATH

我的想法不多了。有什么建议么 ?

4

2 回答 2

0

为 Oracle 编译 Python 模块时,设置:

LD_RUN_PATH=/usr/lib/oracle/11.2/client64/lib

用户环境变量并导出。这将导致该目录嵌入到 Python 扩展模块 .so 文件中,并且无需设置 LD_LIBRARY_PATH 环境变量即可在运行时知道在哪里找到它。

对于标准的 Apache 发行版(Linux 发行版通常有点不同),用于设置额外环境变量的文件称为“envvars”,并且与“httpd”位于同一目录中。对于 Linux 发行版,通常需要在一个特殊的 init.d 启动脚本中。

因此,查找 LD_RUN_PATH 的全部内容。

于 2012-07-11T22:53:31.097 回答
0

我没有在 cx_Oracle rpm 上使用yum install,而是下载了库的源代码并运行 setup.py 构建。

我遇到了一个错误,它将指向试图在以下位置找到即时客户端 sdk 库的函数:

possibleIncludeDirs = ["rdbms/demo", "rdbms/public", "network/public","sdk/include"]

浏览 Oracle_home 文件夹,我发现安装在 lib 文件夹中的 sdk 文件(我在 oracle 的 rpm 上使用 yum install 安装了 skd),而不是在 setup.py 中建议的possibleIncludeDirs或包含文件夹中:

if not includeDirs:
        path = os.path.join(oracleLibDir, "include")
        if os.path.isdir(path):
            includeDirs.append(path)
    if not includeDirs:
        path = re.sub("lib(64)?", "include", oracleHome)
        if os.path.isdir(path):
            includeDirs.append(path)

我下载了即时客户端 sdk(这次是zip文件)并将其解压缩到 lib 文件夹。

然后lib文件夹中有一个sdk文件夹(/usr/lib/oracle/11.2/client64/lib)

然后我启动了 setup.py build 和 setup.py install 并且它起作用了。

于 2012-07-16T12:31:18.877 回答