我在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的路径。
我尝试了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'
我用:
编辑了bashrcexport ORACLE_HOME=/usr/lib/oracle/11.2/client64/lib
export LD_LIBRARY_PATH=$ORACLE_HOME/
export PATH=$ORACLE_HOME/bin:$PATH
我还用
编辑了apachectlORACLE_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 :(得分: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的全部内容。
答案 1 :(得分:0)
我没有在cx_Oracle rpm上使用 yum install ,而是下载了库的源代码并运行了setup.py构建。
我收到一个错误,指向我试图找到即时客户端sdk库的函数:
possibleIncludeDirs = ["rdbms/demo", "rdbms/public", "network/public","sdk/include"]
浏览Oracle_home文件夹,我发现安装在lib文件夹中的sdk文件(我在oracle上使用yum install安装了skd)而不是在 possibleIncludeDirs 或者包含在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(这次是 zip 文件)并将其解压缩到lib文件夹。
然后在lib文件夹中有一个sdk文件夹(/usr/lib/oracle/11.2/client64/lib)
然后我启动了setup.py构建和setup.py安装,它运行良好。