3

私の 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 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

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)

では、何が問題なのですか?他に何ができますか?どうすればデバッグできますか? 助けてください。

4

1 に答える 1

2

The LD_LIBRARY_PATH must be set in the environment outside of the Apache process when Apache is started. It cant be set inside of your web application after Apache has been started.

What you should do is recompile the rdkit module and set:

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

in the environment when compiling it. Setting LD_RUN_PATH at compile time of the Python C extension module will cause that directory to be embedded in the Python C extension module so that it knows where to find the library at run time without LD_LIBRARY_PATH needing to be set.

于 2013-09-11T01:19:54.487 に答える