2012-07-11 37 views
0

我在CentOS 6.2上安装了cx_Oracle。当我从外壳导入库,它工作正常,但是当我通过WSGI启动它,我得到的错误:cx_Oracle使用mod_wsgi环境运行

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

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

我试图提供的解决方案here

我在/ 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 

我运行出于想法。有什么建议么 ?

回答

0

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

我会指向我试图找到在即时客户端SDK库函数的错误:

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

浏览ORACLE_HOME文件夹,我发现其中安装在lib的SDK文件文件夹(我使用yum install在oracle的rpm上安装了skd),并且不在possibleIncludeDirs中,或在安装程序中建议的include文件夹中。潘岳:

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文件夹中(/usr/lib/oracle/11.2/client64/lib)

接着我就推出了setup.py构建和setup.py的安装和它的工作一个SDK文件夹。

1

当你编译for 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的全部内容。