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

PHP通过shell_exec调用Python3时pandas与matplotlib导入异常

问题解决:PHP调用Python脚本因pandas导入失败的处理

问题现象

  1. PHP通过shell_exec()传递JSON参数给Python脚本,只要脚本导入pandas和matplotlib,PHP就返回空对象,Apache日志报数组为空;注释导入语句后执行正常。
  2. PHP写入JSON文件,Python脚本读取后写入输出文件,本地shell执行正常,但shell_exec()调用时输出文件为空;同样注释pandas和matplotlib导入后执行正常。
  3. 通过exec()捕获到Python错误:导入错误:无法从‘pandas.core.strings’导入名称‘StringMethods’

环境信息

  • Python 3.8.10,PHP 8.2.8
  • pandas曾安装1.5.3和2.0.3版本,matplotlib 3.7.2,scipy与pandas位于同一站点包路径

解决步骤

1. 排查环境差异

PHP运行在Apache进程下,使用的Python环境和本地shell的环境大概率不一致:

  • 在PHP中执行以下代码,获取Apache使用的Python路径和pandas版本:
    <?php
    echo "Python路径: " . shell_exec('which python3') . "<br>";
    echo "pandas版本: " . shell_exec('python3 -c "import pandas; print(pandas.__version__)"');
    ?>
    
  • 对比本地shell中执行的结果:
    which python3
    python3 -c "import pandas; print(pandas.__version__)"
    

2. 统一Python环境

  • 如果Apache使用的Python路径和shell不同,直接在shell_exec()中使用shell对应的Python绝对路径,示例:
    <?php
    $result = shell_exec('/usr/local/bin/python3.8 script1.py ' . escapeshellarg($json_data));
    ?>
    
  • 如果pandas版本不一致,给Apache使用的Python环境安装脚本适配的版本(比如脚本适配1.5.3):
    sudo -u www-data python3 -m pip install pandas==1.5.3
    

3. 检查权限

确保Apache用户(通常为www-data)对pandas的站点包目录有读取权限,执行命令修复:

sudo chmod -R o+r /path/to/your/python/site-packages/pandas

4. 模拟Apache环境测试

直接用Apache用户身份运行Python脚本,快速复现和定位问题:

sudo -u www-data python3 script1.py

内容的提问来源于stack exchange,提问作者schustischuster

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 19:15:03