You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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解释器完整路径

  1. 在终端执行以下命令,获取能正常运行的Python解释器路径:

    which python  # 或者用which python3
    

    比如得到路径/usr/local/bin/python3

  2. 修改PHP代码中的命令,替换为完整路径:

    <?php
        $command = "/usr/local/bin/python3 test.py ";
        $command = escapeshellcmd($command);
        $output = shell_exec("$command 2>&1");
        echo $output;
    ?>
    

方法2:给PHP运行用户的Python环境安装cv2

  1. 切换到PHP运行的系统用户(以www-data为例):
    sudo -u www-data bash
    
  2. 在该用户环境下安装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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 08:59:15