我有一个可执行的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
任何想法,如果这是正确的或如何做?谢谢。
白衣非少年
相关分类