2009-12-18 156 views
1

我试图在python中导入模块时,只有当通过系统或exec调用脚本时,我有一个令人费解的问题。从PHP调用python导入失败

从Python外壳:

import igraph #This works. 

假如上一行是在一个文件中,比如,test_module.py,则:在Bash
蟒蛇test_module.py工作。

在PHP:
EXEC( “蟒蛇test_module.py”,$输出,$ RETVAL) - >失败:$ RETVAL = 1

但是,如果脚本来代替:import math,那么这是精细。

有人曾经处理过类似的事吗?

+0

add'import sys;打印sys.path'到你的脚本。 – jfs 2009-12-18 01:41:31

+0

'import os,site; print os.environ.get('PYTHONPATH'),site.USER_SITE;帮助(网站)'也许也有帮助。 – jfs 2009-12-18 01:47:25

+0

我在shell中或从PHP调用的脚本中看到sys.path没有区别。 – 2009-12-18 01:56:38

回答

0

Python的标准模块路径中的igraph模块,还是与您的个人脚本在同一目录?如果是这样,很可能PHP正在调用带有不同工作目录的python文件,并且它试图相对于该路径导入相关内容,而不是脚本的路径。

+0

在python shell中: import igraph; print igraph .__ file__ returns /usr/lib/python2.4/site-packages/python_igraph-0.5.2-py2.4-linux-x86_64.egg/igraph/__init__.pyc 父目录/ usr/lib/python2 .4/site-packages /在PHP脚本中调用时位于sys.path内。 python_igraph-0.5.2-py2.4-linux-x86_64.egg也在sys.path中。 – 2009-12-18 02:01:24

+0

您是否尝试从命令获取输出(或者通过指定'exec()'调用的'output'参数,或者使用'passthru()'来确切地查看python从php调用时给出的错误? – Amber 2009-12-18 02:11:36

+0

我试过这样做。它似乎没有输出Python错误消息,所以我不知道发生了什么。但它的返回值为1. – 2009-12-18 02:18:32

1

一件事是检查sys.path

看出其中的差别是什么所谓的每路

+1

如上所述。我看到sys.path之间没有区别。 – 2009-12-18 01:58:54

0

发生这种情况,因为你有一个不同的用户下安装这些包,也许根本,还是其他什么东西的时候。

我怎么调试这个,我检查sys.path的输出两种情况下(shell和php的exec,它有默认的用户www-data),比我都比较。

我注意到'/root/.local/lib/python2.7/site-packages'路径丢失,当我从PHP中运行它时,它完全包含这些丢失的包。 所以我只是将这个文件夹的内容复制到'/usr/lib/python2.7/dist-packages/',这解决了这个问题。

+0

这是一个坏主意,手工复制python包。您应该使用'apt-get',将Python软件包安装到'/ usr/lib/python2.7/dist-packages /'中。否则,使用'pip'来安装Python包(可能是'virtualenv')。你可能不想在'root'用户下运行'pip'。 – jfs 2016-01-02 03:54:52