为什么Python在从PHP调用时找不到模块?
我使用php的为什么Python在从PHP调用时找不到模块?,php,python,python-2.7,matplotlib,python-import,Php,Python,Python 2.7,Matplotlib,Python Import,我使用php的exec()命令运行python脚本,但收到以下错误: Array ( [0] => Traceback (most recent call last): [1] => File "/vagrant/SRC_Local_Website/EAF_MODEL/EAF_Model.py", line 20, in [2] => from pylab import * [3] => File "/usr/lib/pymodules/python2.7/pylab.p
exec()
命令运行python脚本,但收到以下错误:
Array ( [0] => Traceback (most recent call last): [1] => File "/vagrant/SRC_Local_Website/EAF_MODEL/EAF_Model.py", line 20, in [2] => from pylab import * [3] => File "/usr/lib/pymodules/python2.7/pylab.py", line 1, in [4] => from matplotlib.pylab import * [5] => File "/usr/lib/pymodules/python2.7/matplotlib/__init__.py", line 774, in [6] => rcParams = rc_params() [7] =>
File "/usr/lib/pymodules/python2.7/matplotlib/__init__.py", line 692, in rc_params [8] => fname = matplotlib_fname() [9] => File "/usr/lib/pymodules/python2.7/matplotlib/__init__.py", line 604, in matplotlib_fname [10] =>
fname = os.path.join(get_configdir(), 'matplotlibrc') [11] => File "/usr/lib/pymodules/python2.7/matplotlib/__init__.py", line 253, in wrapper [12] => ret = func(*args, **kwargs) [13] =>
File "/usr/lib/pymodules/python2.7/matplotlib/__init__.py", line 478, in _get_configdir [14] => raise RuntimeError("Failed to create %s/.matplotlib; consider setting MPLCONFIGDIR to a writable directory for matplotlib configuration data"%h) [15] => RuntimeError: Failed to create /var/www/.matplotlib; consider setting MPLCONFIGDIR to a writable directory for matplotlib configuration data )
据我所知,python无法找到matplotlib和pylab模块
我想指出的是:
- 我已成功运行:
sudo apt get install python numpython scipy python matplotlib
- 如果我直接从shell运行这个python文件(例如,
),程序运行正常,没有错误$python myFile.py
- 在我的php文件中,我试图用
)指定这些文件的位置(见下文)putenv('PYTHONPATH=…
from casadi import *
from numpy import *
from pylab import *
import matplotlib.pyplot as plt
最初,找不到cadADi,因此我添加了:
putenv('PYTHONPATH=$PYTHONPATH:/vagrant/SRC_Local_Website/EAF_MODEL/python_plugins/casadi-py27-np1.9.1-v3.0.0');
这不再是一个问题
与numpy类似,我必须补充:
putenv('PYTHONPATH=$PYTHONPATH:/usr/lib/python2.7/dist-packages');
最后,我试图补充:
putenv('PYTHONPATH=$PYTHONPATH:/usr/lib/pymodules/python2.7');
这就是mathplotlib和pylab所在的位置(我不知道为什么它们与dist包分离,这正是它们自动安装到的位置),但不幸的是,我仍然收到上面的错误
问题:这个问题的原因是什么?您是否可以检查脚本的工作目录(使用exec的目录)和Python解释器的位置?(import os;print(os.getcwd()
)?另外,您是否尝试过从可移植的Python发行版(例如WinPython)运行代码?@armatita谢谢,我刚刚检查了这两个位置,php脚本和python文件都位于/vagrant/SRC_Local_Website/EAF_MODEL中,当我运行您指定的命令时,它也会返回上面的路径。我还没有使用可移植的发行版,但我现在会研究它。我指的是python解释器的位置,而不是e Python脚本。Python脚本正在运行(否则将不会“编译”您的脚本,也不会存在错误)。我怀疑您正在运行Python脚本,但系统路径与您所认为的不同(因此导入失败)。我可能对您有点误解,但遵循此处的帖子()输出是/usr/bin/python
。我在php中运行python脚本时使用的命令也是:exec('/usr/bin/python/vagrant/SRC_Local_Website/EAF_MODEL/EAF_MODEL.py 2>&1',$output);
这很奇怪?该命令应该给您一个完整的路径(因此它应该以python可执行文件结束)。但请注意,我是windows用户,在我看来,该路径类似于Linux系统(可能是Ubuntu?)中本机python解释器的文件夹。您能否确认您的电脑中只有python版本?(请尝试:系统外壳中的python在哪里,或者python在哪里2.7
)。如果您发现有多个版本,请尝试添加要在exec命令中使用的实际python发行版。很抱歉,没有更现成的答案。此时,我和您一样感到困惑。您可以检查脚本的工作目录(使用exec的)和python解释器的位置吗?(import os;print(os.getcwd()
)?另外,您是否尝试过从可移植的Python发行版(例如WinPython)运行代码?@armatita谢谢,我刚刚检查了这两个位置,php脚本和python文件都位于/vagrant/SRC_Local_Website/EAF_MODEL中,当我运行您指定的命令时,它也会返回上面的路径。我还没有使用可移植的发行版,但我现在会研究它。我指的是python解释器的位置,而不是e Python脚本。Python脚本正在运行(否则将不会“编译”您的脚本,也不会存在错误)。我怀疑您正在运行Python脚本,但系统路径与您所认为的不同(因此导入失败)。我可能对您有点误解,但遵循此处的帖子()输出是/usr/bin/python
。我在php中运行python脚本时使用的命令也是:exec('/usr/bin/python/vagrant/SRC_Local_Website/EAF_MODEL/EAF_MODEL.py 2>&1',$output);
这很奇怪?该命令应该给您一个完整的路径(因此它应该以python可执行文件结束)。但请注意,我是windows用户,在我看来,该路径类似于Linux系统(可能是Ubuntu?)中本机python解释器的文件夹。您能否确认您的电脑中只有python版本?(请尝试:系统外壳中的python在哪里,或者python在哪里2.7
)。如果您发现您有多个版本,请尝试添加要在exec命令中使用的实际python发行版。很抱歉,没有更准确的答案。此时,我和您一样感到困惑。