我有一个 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 中的变量 PATH
和 PYTHONPATH
。
在终端中:
$ 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/