Django 如何在CentOS 6上导入cx_Oracle?

Django 如何在CentOS 6上导入cx_Oracle?,django,centos,mod-wsgi,cx-oracle,centos6,Django,Centos,Mod Wsgi,Cx Oracle,Centos6,我很难让Django使用我的Apache/mod_wsgi安装来访问Oracle。我在CentOS 6主机上运行了此设置,我在Apache日志中发现此错误: Error loading cx_Oracle module: libclntsh.so.10.1: cannot open shared object file: No such file or directory 如果我尝试从Python命令行导入cx\u Oracle,它在root和apache用户中都可以正常工作。我正确地设置了O

我很难让Django使用我的Apache/mod_wsgi安装来访问Oracle。我在CentOS 6主机上运行了此设置,我在Apache日志中发现此错误:

Error loading cx_Oracle module: libclntsh.so.10.1: cannot open shared object file: No such file or directory
如果我尝试从Python命令行导入
cx\u Oracle
,它在root和apache用户中都可以正常工作。我正确地设置了
ORACLE\u HOME
LD\u LIBRARY\u PATH
$ORACLE\u HOME/lib
)在
~/.bashrc
/etc/LD.so.conf.d/ORACLE.conf
~/.bash\u profile
,任何我可以设置环境变量的地方

我还尝试在
/usr/lib
中创建一个指向
$ORACLE\u HOME/lib/libclntsh.so.10.1
的硬链接或符号链接,但我得到了一个权限错误,无论我从
/usr
/usr/lib
和该文件发布了多少个
chmod 777

我在
/etc/sysconfig/httpd
中添加了
ORACLE\u HOME
LD\u LIBRARY\u路径
,没有任何更改


显然,只有当Apache用户运行import cx_Oracle命令时,才会发生此错误,尽管使用此用户登录时,我可以从Python解释器运行该命令。

当您从源代码构建cx_Oracle时,将LD_RUN_PATH环境变量设置为包含Oracle.so文件的lib目录的路径,它将在cx_Oracle.so中嵌入该位置,并知道在运行时从何处获取libclntsh.so,而无需设置LD_LIBRARY_PATH。

有更好的解决方案,无需重新安装。。 “将/app/oracle/oracle/product/10.2.0/db_1/lib追加到/etc/ld.so.conf并运行ldconfig。”

我已经构建了没有该选项的cx\U Oracle。所以,我可以设置该var并重建它,它应该工作,还是应该在重建之前先删除它?您需要从干净的cx_Oracle源代码开始,以确保不使用已生成的版本。变量需要在用户环境中设置和导出。在构建/安装cx_Oracle之后,将变量设置为不需要。仍然不起作用。我收到了相同的错误消息。我如何知道Apache使用哪些Python来运行WSGI?无论如何,我可以作为apache运行命令
import cx_Oracle
,这对我来说是最奇怪的。我如何解决这个问题:我还尝试在/usr/lib中创建一个到$Oracle_HOME/lib/libclntsh.so.10.1的硬链接或符号链接,但是我得到了一个权限错误,不管我从/usr下发多少个chmod 777到/usr/lib和该文件。我在另一篇博文中看到了这个解决方案,它在那里起了作用。解决了!!!是该死的SELINUX阻止了libs的执行!我已将
/usr/sbin/setEnforce0
/etc/selinux/config
设置为禁用。很好!谢谢