www-data用户无法导入已安装的python模块

mf98qq94  于 4个月前  发布在  Python
关注(0)|答案(2)|浏览(63)

我正在尝试创建一个web服务器,它最终使用以下命令从PHP代码调用python脚本(“MyScript.py“)

echo exec("MyScript.py ....some arguments")

字符串
MyScript.py实际上包含了一段代码,它使用了RDkit和其他模块,比如numpy。
当我从用户(MKT)运行这个MyScript.py时,它就像一个魅力。
但是当它从服务器的PHP脚本执行时,问题就出现了。/var/www/log/apache 2/error. log中的错误消息如下:

ImportError: No module named rdkit
Traceback (most recent call last):
File "./preditar/preditar.py", line 7, in <module>
from rdkit import Chem


我的rdkit安装在/opt/RDKit_2013_06_1/rdkit/,如果从MKT用户运行它们,结果如下

MKT@mypc$ python -v


在Python环境下:

import rdkit


下面是输出:

import rdkit # precompiled from /opt/RDKit_2013_06_1/rdkit/\__init__.pyc


我认为执行此操作的用户www-data无法访问此模块. MyScript.py???
注意:当我修改MyScript.py到一个简单的脚本,只是创建一个文件,并写入数据到它.它正常工作,没有任何问题,这意味着我没有任何问题有关的权限。

llycmphe

llycmphe1#

看起来像是Python导入搜索路径的问题。尝试像这样更改导入:

import sys
sys.path.insert(0, "/opt/RDKit_2013_06_1")
import rdkit

字符串

8ulbf1ek

8ulbf1ek2#

通过sys.path.insert将为用户ubuntu找到的丢失路径添加到用户www-data是不可伸缩的,也是不可能的(因为www-data用户无法访问ubuntu用户路径),所以最好的方法是以一种www-data用户可以访问的方式安装python模块(在本例中是rdkit)
第一个月
sudo mkdir /var/www/.cache
sudo chown www-data:www-data /var/www/.local
sudo chown www-data:www-data /var/www/.cache
sudo -H -u www-data pip install rdkit
https://nocurve.com/2018/04/23/running-python-script-from-php-as-www-data/

相关问题