【问题标题】:How to make PHP recognize locally installed Python module for executing Python script如何让 PHP 识别本地安装的 Python 模块以执行 Python 脚本
【发布时间】:2014-06-03 11:16:16
【问题描述】:

我有以下 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" }

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

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

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

【问题讨论】:

  • eval() 执行 PHP 代码;你可能想要exec()
  • @MarkBaker: 错误是由exec() 而不是eval() 引起的。感谢您指出。我在做OP时犯了一个错误。我已经更新了我的 OP。

标签: php python html apache web-services


【解决方案1】:

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

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

【讨论】:

  • 1.我不是超级用户,我希望 PHP 能够灵活地访问本地安装的其他 python 模块,2. BeautifulSoup 只是一个例子。实际上,我正在使用许多其他本地安装的 Python 模块。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-13
  • 1970-01-01
  • 2020-04-21
  • 2014-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多