【问题标题】:Python package not imported when executed through PHP通过 PHP 执行时未导入 Python 包
【发布时间】:2019-06-30 05:26:13
【问题描述】:

通过 PHP 执行 new_api.py 时,我收到 spacy 的导入错误。通过cmd运行python脚本成功执行

PHP 代码

<?php
$json = file_get_contents('php://input');
$input = json_decode($json, TRUE);
$result = shell_exec('/usr/bin/python3 new_api.py "'.$input['queryResult']['queryText'].'" "'.$input['session'].'" 2>&1');
$output = json_encode(array(
            "source" => "source",
            "fulfillmentText" => $result
            ));
print_r($output);
?>

Python 代码片段

import requests
import json
import sqlite3
import spacy
import sys

json_values = sys.argv[1:]
result = (home(json_values[0],json_values[1]))
print(result)

输出/错误回溯

{"source":"source","fulfillmentText":"Traceback(最近一次调用最后一次):\n 文件 \"new_api.py\",第 4 行,在 \n import spacy\nImportError: No module named 'spacy'\n"}

服务器中有两个版本的python。两个版本都安装了 spacy,python 脚本与两个版本都兼容。

我尝试过的事情

  • 尝试在 php 中使用 exec()shell_exec()
  • 尝试使用which python路径执行脚本
  • 尝试运行pythonpython3 的脚本

    即使在尝试了上述步骤的组合后,ImportError 仍然存在。任何帮助将不胜感激。

  • 【问题讨论】:

      标签: php python shell spacy


      【解决方案1】:

      可能执行PHP脚本的服务器用户没有足够的权限访问模块。

      您可以作为服务器用户安装模块或使用venv

      【讨论】:

        【解决方案2】:

        我也有同样的问题,刚刚解决了。这个问题很老了,但我给有同样问题的人留个便条,对我来说。

        1. shell 上的“printenv”(您自己的用户)。
        2. exec('printenv') 来自 php(可能是“apache”用户)。
        3. 检查 1 和 2 结果之间的差异。

        就我而言,需要 LD_LIBRARY_PATH=/usr/local/pgsql/lib (存在于 1 中且不存在于 2 中)。所以我修改了我的代码如下:

        exec('LD_LIBRARY_PATH=/usr/local/pgsql/lib python3 test_script.py 2>&1');

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-01-26
          • 1970-01-01
          • 2011-02-14
          • 1970-01-01
          • 1970-01-01
          • 2021-08-09
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多