php - 从 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);
}
?>
谁能帮助解决这个问题?
解决方案
最有可能的是,当您的 PHP 脚本执行您的 Python 脚本时,它以不同的用户(可能是超级用户)执行它。您可以做的是检查软件包是否安装在超级用户下
sudo pip list
或者如果您使用的是 python3
sudo pip3 list
查看我们要使用的软件包是否从此命令中列出。
如果它们未列出,您可以通过以下命令轻松安装它们:
sudo pip install <pkg name>
或者
sudo pip3 install <pkg name>
您在这里所做的是在超级用户而不是本地用户下安装软件包。
推荐阅读
- python - Django 模型 ImageField 中的默认图像不起作用
- python - 从日期时间对象列表中绘制 matplotlib 中的日期和时间
- c# - 这个 Unity 脚本使游戏对象围绕一个对象旋转。如何?
- html - 为什么我的 scss 变量没有按预期解析?
- python - python套接字和vpn
- excel - 使用 Excel VB getElementsByTagName("a") 进行网页抓取仅在某些时候有效
- python - 使用 win32com 和 pandas 循环 Outlook 日历邀请
- database - 如何从转储文件中恢复 PostgreSQL 数据库
- flutter - 在颤动一定延迟后,有没有办法处理或弹出小部件?
- javascript - 最大化和最小化按钮不触发效果