在我的web应用程序中,我有以下代码:
from rdkit import Chem
这导致它在apache下崩溃,在日志中我可以看到:
^{pr2}$看起来这个问题是由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/'
以及在虚拟主机apache conf中:
<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>
我可以在同一台计算机上从命令行运行此命令而不会出现问题:
(chembl_webservices)-bash-4.1$ export PYTHONPATH=/nfs/public/rw/chembl/utils/RDKit_2012_09_1/
(chembl_webservices)-bash-4.1$ export LD_LIBRARY_PATH=/nfs/public/rw/chembl/utils/RDKit_2012_09_1/lib
(chembl_webservices)-bash-4.1$ /nfs/public/rw/chembl/utils/virtualenvs/ldc/envs/chembl_webservices/bin/python
Python 2.7.5 (default, Aug 5 2013, 17:00:57)
[GCC 4.4.6 20120305 (Red Hat 4.4.6-4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
import rdkit
from rdkit import Chem
当然,我可以让我的脚本打印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
我可以运行lddlibRDGeneral.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模块并设置:
在编译它的环境中。在PythonC扩展模块的编译时设置LD_RUN_PATH将导致该目录嵌入到Python C扩展模块中,这样它就知道在运行时在哪里可以找到库,而不需要设置LD_library_PATH。在
相关问题 更多 >
编程相关推荐