当使用php脚本中的eval()调用脚本以及从bash脚本调用相同的函数时

我有一个可执行的python脚本,它使用pymysql库存档来自mysql服务器的数据。该脚本从命令行运行良好。


我使用escapeshellcmd函数从php脚本调用此脚本,并且我已经让它工作了。


我还创建了一个bash脚本,我打算从crontab使用它来存档信息。我也可以通过进行下面概述的更改来使此脚本正常工作。


不知何故,我遇到了python版本和路径问题。


如果我包括


#!/home/tim/anaconda3/bin/python

作为python脚本的第一行,当被php脚本调用时,它可以工作(我相信使用www-data作为用户)。它无法从 bash 脚本或命令行工作,并给出以下错误:


  File "./signal_archive.py", line 22, in <module>

    import pymysql

ModuleNotFoundError: No module named 'pymysql'

但是,如果 python 脚本的第一行如下所示:


#!/usr/bin/python3

该脚本从 bash 脚本和命令行工作,但不能从 php 脚本工作。它给出以下错误:


  File "/home/tim/python/commodities_related/signal_archive.py", line 23, in <module>

    import pandas as pd

ModuleNotFoundError: No module named 'pandas'

这两个软件包都安装在我的系统上。考虑到将脚本指向路径会有所帮助,我将以下内容添加到python脚本中,但到目前为止没有运气。


sys.path.append('/usr/lib/python3/dist-packages:')

sys.path.append('/usr/local/lib/python3.5/dist-packages:')

显然,我错过了一些东西。我认为是php脚本是由www-user调用的,我不知道默认路径。bash文件由我的用户使用.bashrc文件中指定的路径调用。但是,我可能需要指出apache或php(www-user)才能使用Python的特定安装。


编辑 - 为了更清楚,php脚本(phpfile1.php)调用python脚本。当我从另一个在apache2上运行的php脚本(phpfile2.php)调用phpfile1.php时,我一切都可以使用


#!/home/tim/anaconda3/bin/python

当我从bash脚本从不同的php脚本(phpfile3.php)调用同一文件(phpfile1.php)时,它会失败。此外,如果我使用以下命令就地运行该文件


./signal_archive.py

我收到错误,但如果我使用以下命令运行它,它的工作原理:


python signal_archive.py

任何想法,如果这是正确的或如何做?谢谢。


30秒到达战场
浏览 79回答 1
1回答

白衣非少年

我通过2个步骤修复了这个问题:事实证明,我需要将 anaconda3 的路径添加到我的.bash_profile文件中。export PATH="/home/tim/anaconda3/bin:$PATH"安装 anaconda3 后,它会使用前面的代码片段修改 .bashrc 文件。然而,在这种情况下,.bash_profile做出了改变。我还修改了python文件的顶部,以使用anaconda路径进行执行,并为特定的python包添加路径。#!/home/tim/anaconda3/bin/pythonimport syssys.path.insert(1, '/usr/local/lib/python3.5/dist-packages')
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python