php - 通过终端和通过 PHP 调用 python 脚本之间的区别?错误在哪里?

标签 php python import terminal exec

我有一个 PHP 脚本,它通过以下方式调用 python 脚本

$call_python = "python ../python/lp_3.py ".$author;
$python_output = Null;
$mystring = exec($call_python, $output_python);

这会在日志中产生一个错误:

$ vi logs/error_log shows
....
Traceback (most recent call last):
    File "../python/lp_3.py", line 14, in <module>
        import MySQLdb
ImportError: No module named MySQLdb

如果我在终端中执行 python python/lp_3.py 一切都很好。我想念什么?

编辑:

根据@S.Lott 的建议,我查看了终端和 PHP 中的变量 PATHPYTHONPATH

在终端中:

$ echo $PYTHONPATH

$ echo $PATH
/opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/git/bin:/usr/texbin:/usr/X11/bin

如您所见,PYTHONPATH 是空的。

在 PHP 中:

echo getenv("PYTHONPATH"); // NOTHING
echo getenv("PATH"); // /usr/bin:/bin:/usr/sbin:/sbin

也许我应该提到我的 python 脚本中的前两行是

#!/usr/bin/env python
# encoding: utf-8

我愿意接受建议。 =)

编辑2:

我检查了我的 mac 上安装的每个 python 版本。我发现,python2.7 没有安装 MySQLdb。有没有办法告诉 PHP 使用 python2.7 并使用例如python2.6 代替?我尝试在 PHP 中使用 setenv(),但我不知道如何正确使用它,我什至不知道这是否是正确的方法。

最佳答案

在您的 PHP 代码中,您只是调用“python”,并让 PHP 决定使用哪个版本的 Python。使用特定 Python 二进制文件的显式路径(例如/usr/bin/python2.6)。

您需要知道安装了 MySQLdb 的 Python 版本的确切路径。

关于php - 通过终端和通过 PHP 调用 python 脚本之间的区别?错误在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6051693/

相关文章:

javascript - 注销并按后退按钮后,同一页面将在 PHP 中显示

python - 以低延迟从 IP Camera 获取帧

python - 在 Pandas 面板上广播乘法

python - 将 python 实用函数导入 jupyter 笔记本

MySql,如何将索引从我的开发数据库导出到我的生产数据库?

google-maps - 在子组件中使用 SebM 谷歌地图模块显示空白 map

php - 如何在我的开发机器上支持 "AddType x-mapp-php5 .php"

php - 是否可以在执行 PHP 脚本的每一行后运行 PHP 函数?

php - 通过循环访问数组内容

python - Python 中的函数多态性