如何让PHP识别本地安装的Python模块来执行Python脚本


How to make PHP recognize locally installed Python module for executing Python script

我有以下Python代码,稍后将使用PHP调用:

#!/usr/bin/env python    
"""Code name: test.py"""
import BeautifulSoup
import sys
myargs = sys.argv[1]
mylist = ["foo bar qux", "uix nan col"]
for chunk in mylist:
    mems = chunk.split()
    mems.append(myargs)
    print mems

模块BeautifulSoup在本地安装:

$ echo $PYTHONPATH
/home/pdubois/.local/lib/python2.7/site-packages
这是调用它的PHP代码
    <HTML>
    <HEAD>
    <TITLE>MYCODE</TITLE>
    </HEAD>
    <BODY>
    <BR>
     <?php echo '<p>This is the output of my code:</p>'; ?>
     <?php
         exec(`python /misc/path_to_mycode/test.py param1`,$output);
        var_dump($output)
     ?>
   </BODY>
   </HTML>

上面的index.php代码位于/var/www/html

我得到的结果是:

array(4) { [0]=> string(34) "Traceback (most recent call last):" 
[1]=> string(65) " File "/u21/pdubois/my_project/test.py", line 15, in " 
[2]=> string(24) " import BeautifulSoup" 
[3]=> string(42) "ImportError: No module named BeautifulSoup" }

当我注释掉import BeautifulSoup在test.py。PHP代码返回正确的预期结果:

array(2) { [0]=> string(31) "['foo', 'bar', 'qux', 'mcpip1']" 
[1]=> string(31) "['uix', 'nan', 'col', 'mcpip1']" }

问题是我应该怎么做才能使PHP/Python/Apache识别BeautifulSoup或任何本地安装的模块?

您为BeautifulSoup显示的目录出现在您的主目录中。但是我怀疑Apache是以您的方式运行的:它很可能是以www的方式运行的。因此,您需要为该用户或全局安装模块。

当然,更好的方法是坚持使用一种语言:如果你想运行Python,那么使用Python框架编写网站;或者使用PHP HTML解析器。