Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python apache没有';你不尊重图书馆的道路吗?_Python_Apache_Mod Wsgi_Ld_Rdkit - Fatal编程技术网

Python apache没有';你不尊重图书馆的道路吗?

Python apache没有';你不尊重图书馆的道路吗?,python,apache,mod-wsgi,ld,rdkit,Python,Apache,Mod Wsgi,Ld,Rdkit,在我的web应用程序中,我有以下代码: from rdkit import Chem 这导致它在apache下崩溃,在我可以看到的日志中: [Fri Sep 06 10:35:44 2013] [error] [client 172.22.69.51] ImportError: libRDGeneral.so.1: cannot open shared object file: No such file or directory 看起来这个问题是由LD_LIBRARY_PATH引起的,但我在

在我的web应用程序中,我有以下代码:

from rdkit import Chem
这导致它在apache下崩溃,在我可以看到的日志中:

[Fri Sep 06 10:35:44 2013] [error] [client 172.22.69.51] ImportError: libRDGeneral.so.1: cannot open shared object file: No such file or directory
看起来这个问题是由LD_LIBRARY_PATH引起的,但我在wsgi.py文件中设置了它:

os.environ['LD_LIBRARY_PATH']='/usr/lib/oracle/11.2/client64/lib:/nfs/public/rw/chembl/utils/RDKit_2012_09_1/lib:/nfs/public/rw/chembl/utils/indigo/lib/Linux/x64/'
以及在VirtualHost apache配置中:

<VirtualHost *:8787>
    ...
SetEnv LD_LIBRARY_PATH /usr/lib/oracle/11.2/client64/lib:/nfs/public/rw/chembl/utils/RDKit_2012_09_1/lib:/nfs/public/rw/chembl/utils/indigo/lib/Linux/x64/
</VirtualHost>
当然,我可以让我的脚本打印LD_LIBRARY_PATH的实际值,这样我就知道它设置正确,文件和路径存在,权限正常:

ls /nfs/public/rw/chembl/utils/RDKit_2012_09_1/lib -lh
-rwxr-xr-x 1 cbl_adm cbl_pub 406K Aug  8 11:13 libRDGeneral.so.1.2012.09.1
我可以运行ldd libRDGeneral.so.1.2012.09.1以查看是否满足所有依赖项:

linux-vdso.so.1 =>  (0x00007fff397ff000)
libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00007f096ecd5000)
libm.so.6 => /lib64/libm.so.6 (0x00007f096ea50000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f096e83a000)
libc.so.6 => /lib64/libc.so.6 (0x00007f096e4a7000)
/lib64/ld-linux-x86-64.so.2 (0x00007f096f22d000)

那怎么了?我还能做什么?如何调试它?请提供帮助。

启动Apache时,必须在Apache进程之外的环境中设置LD_LIBRARY_路径。Apache启动后,不能在web应用程序中设置它

您应该做的是重新编译rdkit模块并设置:

LD_RUN_PATH=/nfs/public/rw/chembl/utils/RDKit_2012_09_1/lib

在编译它时在环境中。在Python C扩展模块的编译时设置LD_RUN_PATH将导致该目录嵌入Python C扩展模块中,这样它就知道在运行时在哪里可以找到库,而不需要设置LD_library_PATH。

如果我有多台机器,并且我想将库放在nfs上,这样我就不需要每次编译它了,该怎么办时间(我甚至不能编译它,因为没有安装gcc)?
LD_RUN_PATH=/nfs/public/rw/chembl/utils/RDKit_2012_09_1/lib