我在Ubuntu 17.10上运行apache2。在php文件中有:
<?php
exec("python3 test_python.py 2>&1",$res);
for ($i=0; $i < sizeof($res); $i++) {
echo $res[$i] . '<br>';
}
?>
在test_python.py内部有:
import numpy as np
print("it works from here.");
不幸的是,我得到的结果是:
追溯(最近一次调用):文件“ test_python.py”,第1行,在导入numpy中作为np出现ModuleNotFoundError:没有名为“ numpy”的模块
当我通过终端运行脚本时,自己如下所示:
python3 test_python.py
它工作正常。我怀疑权限存在问题,但尚未找到解决方案。
这看起来像一个PATH
/PYTHONPATH
问题。将python3
您从交互式shell中运行可能不一样的一个阿帕奇/ PHP运行; 和/或sys.path
两种情况下可能会有所不同,因此numpy
在一种情况下可以找到,而在另一种情况下却没有。
运行具有依赖项的Python脚本的最安全,最可靠的方法是使用创建虚拟环境virtualenv
,将其激活,然后在其中安装dep:
cd /path/to/project # go to your project dir
virtualenv -p python3 env # create python3-based virtual environment
. env/bin/activate # activate the virtual environment in env/
pip install numpy # install all dependencies
deactivate # deactivate env
然后只需python
从刚刚创建的虚拟环境(env/bin/python
)中调用,即可从PHP运行Python脚本:
<?php
exec("/path/to/project/env/bin/python test_python.py 2>&1", $res);
...
现在可以在中使用虚拟环境中安装的所有软件包test_python.py
。
要添加其他软件包,只需再次激活您的虚拟环境,然后pip
在此处安装即可。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句