使用 shell_exec 启动 Python 脚本时,脚本不起作用

问题描述 投票:0回答:1

我写了一个 Python 脚本,它使用

rembg
库删除图像的背景,然后使用 PIL 合成图像。

对于这个项目,创建了一个

virtualenv
并在那里安装了
rembg
。 所有这些都在 Ubuntu 20.04 服务器上。

项目文件夹位于

/var/www/work/py/banner_generator
,包含一个名为venv的虚拟环境文件夹。 Python 脚本本身位于
/var/www/work/py/banner_generator/banner_generator.py
。如果我从控制台运行命令
/var/www/work/py/banner_generator/venv/bin/python3.8 /var/www/work/py/banner_generator/banner_generator.py
,它会按预期工作。

但是,我需要在 PHP 脚本中运行这个脚本。当我在 PHP 中执行代码时:

$cmd = "/var/www/work/py/banner_generator/venv/bin/python3.8 /var/www/work/py/banner_generator/banner_generator.py";
$output = shell_exec($cmd);

echo $output;

什么都没发生。当我注释掉代码并在 Python 脚本中只留下“print("work")”时,一切都在 PHP 中运行。

我决定注释掉我的代码并测试它。首先,在 Python 脚本中,我只留下“print("work")”并检查了它。在这种情况下,一切都在 PHP 中运行。然后我决定继续试验并取消注释我所有的导入,导致以下代码:

import argparse
import os
from rembg import remove
from PIL import Image, ImageDraw, ImageFilter, ImageEnhance
import requests
from io import BytesIO

print("work")

我又跑了一遍,还是不行。 “工作”声明没有出现。

然后我开始注释掉一些导入,通过反复试验,发现问题只出现在导入rembg的时候。换句话说,以下代码有效:

import argparse
import os
# from rembg import remove
from PIL import Image, ImageDraw, ImageFilter, ImageEnhance
import requests
from io import BytesIO

print("work")

有趣的事实:PIL仅安装在虚拟环境中,但其导入不会造成任何问题。但是,由于某种原因,导入 rembg 会导致问题。

php python-3.x virtualenv rembg
1个回答
0
投票

在运行 Python 脚本之前,您可以尝试设置 PYTHONPATH 环境变量以在 PHP 脚本中包含 rembg 库的路径。例如:

putenv("PYTHONPATH=/var/www/work/py/banner_generator/venv/lib/python3.8/site-packages");
$cmd = "/var/www/work/py/banner_generator/venv/bin/python3.8/var/www/work/py/banner_generator/banner_generator.py";
$output = shell_exec($cmd);
echo $output;
© www.soinside.com 2019 - 2024. All rights reserved.