首页 > 解决方案 > 从 PHP 运行 python 脚本时不导入 Python 模块

问题描述

我有一个 Python 脚本,当我在终端中运行它时它运行良好。这里是:

import bs4, requests, json, sys
from sys import argv

def getFsmonData(link):
    res = requests.get(link)
    res.raise_for_status()
    soup = bs4.BeautifulSoup(res.text)

    # Get table data
    tds = soup.select('td')
    new_td_list = []
    for i in range(len(tds)):
        inner_td_list = []
        for y in range(len(tds)):
            inner_td_list.append(tds[y].getText())
        new_td_list.append(inner_td_list)
    print(inner_td_list)
    td_list_json = json.dumps(inner_td_list)
    tdf = open("/path/to/file/data/td_data.txt", "w")
    tdf.write(td_list_json)
    tdf.close()

getFsmonData(sys.argv[1])

但现在我试图从 PHP 运行它,我收到以下错误:

回溯(最后一次调用):文件“/path/to/file/example.py”,第 1 行,导入 bs4,请求,json,sys ModuleNotFoundError:没有名为“bs4”的模块

我猜 PHP 认为我没有安装这个模块,但我当然不确定。这是我的PHP代码:

<?php
    $link = $_POST['dn-link'];

    if (isset($_POST['submit'])) {
        system('/usr/bin/python3 /path/to/file/example.py ' . escapeshellarg($link) . ' 2>&1', $retval);
    }
?>

谁能帮助解决这个问题?

标签: phppython

解决方案


最有可能的是,当您的 PHP 脚本执行您的 Python 脚本时,它以不同的用户(可能是超级用户)执行它。您可以做的是检查软件包是否安装在超级用户下

sudo pip list

或者如果您使用的是 python3

sudo pip3 list

查看我们要使用的软件包是否从此命令中列出。

如果它们未列出,您可以通过以下命令轻松安装它们:

sudo pip install <pkg name>

或者

sudo pip3 install <pkg name>

您在这里所做的是在超级用户而不是本地用户下安装软件包。


推荐阅读