PHP通过shell_exec调用Python脚本出现ModuleNotFoundError问题求助
解决PHP调用Python脚本找不到cv2模块的问题
问题场景:
- Python脚本(test.py):
import cv2 print('Hello') - PHP代码:
<?php $command = "python test.py "; $command = escapeshellcmd($command); $output = shell_exec("$command 2>&1"); echo $output; ?> - 错误提示:
ModuleNotFoundError: No module named 'cv2',但终端直接运行Python脚本正常。
核心原因
PHP运行时使用的系统用户(通常是www-data或apache)和你终端登录的用户,Python环境完全独立——终端里安装的cv2不在PHP用户的Python包路径中。
解决方法
方法1:指定终端可用的Python解释器完整路径
在终端执行以下命令,获取能正常运行的Python解释器路径:
which python # 或者用which python3比如得到路径
/usr/local/bin/python3修改PHP代码中的命令,替换为完整路径:
<?php $command = "/usr/local/bin/python3 test.py "; $command = escapeshellcmd($command); $output = shell_exec("$command 2>&1"); echo $output; ?>
方法2:给PHP运行用户的Python环境安装cv2
- 切换到PHP运行的系统用户(以
www-data为例):sudo -u www-data bash - 在该用户环境下安装opencv-python:
pip install opencv-python # 若用python3则用pip3
方法3:排查环境差异(用于定位问题)
在Python脚本中添加环境信息打印,分别在终端和PHP调用时运行,对比输出:
import sys print("Python解释器路径:", sys.executable) print("Python包搜索路径:", sys.path) import pkg_resources print("已安装包:", [pkg.key for pkg in pkg_resources.working_set])
通过对比两者的Python路径和已安装包列表,就能明确环境差异所在。
内容的提问来源于stack exchange,提问作者Chandan Kalita
相关产品推荐
相关产品推荐

