Apache cx_Oracle在mod_wsgi环境下运行

Apache cx_Oracle在mod_wsgi环境下运行,apache,centos,mod-wsgi,redhat,cx-oracle,Apache,Centos,Mod Wsgi,Redhat,Cx Oracle,我在CentOS 6.2上安装了cx_Oracle。当我从shell导入库时,它工作正常,但是当我通过wsgi启动它时,我得到了错误: ImportError: libclntsh.so.10.1: cannot open shared object file: No such file or directory 这是一个环境变量问题:cx_Oracle找不到库的路径 我已经尝试了提供的解决方案 我在/usr/lib目录中添加了一个到libclntsh.so.10.1的链接,其中包含ln 我编

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

ImportError: libclntsh.so.10.1: cannot open shared object file: No such file or directory
这是一个环境变量问题:cx_Oracle找不到库的路径

我已经尝试了提供的解决方案

我在/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
/usr/lib/oracle/11.2/client64/lib
我编辑了/etc/ld.so.conf并添加了:

ORACLE_HOME=/usr/lib/oracle/11.2/client64/lib
LD_LIBRARY_PATH=$ORACLE_HOME/
PATH=$ORACLE_HOME/bin:$PATH
/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
我还用

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

我的想法快用完了。有什么建议吗?

为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的全部内容。

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

我遇到一个错误,该错误将指向尝试在中查找即时客户端sdk库的函数:

possibleIncludeDirs = ["rdbms/demo", "rdbms/public", "network/public","sdk/include"]
浏览Oracle_主文件夹时,我发现安装在lib文件夹中的sdk文件我使用yum install在Oracle的rpm上安装了skd,而不是在setup.py中建议的可能包含目录或包含文件夹中:

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压缩文件,并将其解压缩到lib文件夹

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

然后,我启动了setup.py构建和setup.py安装,它成功了