从PHP调用时Python导入失败
我在用PHP通过系统命令或exec调用Python脚本时,遇到了一个让人困惑的问题,导入模块的时候总是出错。
在Python的命令行中:
import igraph #This works.
如果之前的代码在一个文件里,比如叫做test_module.py,那么在bash里运行:
python test_module.py 是可以正常工作的。
但在PHP中:
exec("python test_module.py",$output,$retval) -> 失败了 : $retval = 1。
不过,如果脚本内容改成:import math
,那就没问题了。
有没有人遇到过类似的情况?
5 个回答
0
你知道Python里有一个叫igraph的模块吗?它是在Python的标准模块路径里,还是和你自己的脚本在同一个文件夹里呢?如果是后者,那很有可能是PHP在调用这个Python文件的时候,使用了不同的工作目录。这就导致它在导入模块时,按照那个不同的路径来找,而不是按照你脚本所在的路径来找。
1
有一点需要检查的是 sys.path
看看用不同方式调用时有什么区别
3
这个问题发生是因为你在不同的用户下安装了那些软件包,可能是以root用户或者其他用户身份安装的。
我调试这个问题的方法是,检查了两种情况下的sys.path输出(一个是在命令行下,另一个是在PHP的exec中,默认是www-data用户),然后对比了这两者。
我发现当我从PHP运行时,'/root/.local/lib/python2.7/site-packages'
这个路径缺失了,而这个路径里正好包含了那些缺失的软件包。所以我把这个文件夹里的内容复制到了'/usr/lib/python2.7/dist-packages/'
,这样问题就解决了。