我有一个可执行的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 pymysqlModuleNotFoundError: 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 pdModuleNotFoundError: 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任何想法,如果这是正确的或如何做?谢谢。
1 回答
白衣非少年
TA贡献1155条经验 获得超0个赞
我通过2个步骤修复了这个问题:
事实证明,我需要将 anaconda3 的路径添加到我的.bash_profile文件中。
export PATH="/home/tim/anaconda3/bin:$PATH"
安装 anaconda3 后,它会使用前面的代码片段修改 .bashrc 文件。然而,在这种情况下,.bash_profile做出了改变。
我还修改了python文件的顶部,以使用anaconda路径进行执行,并为特定的python包添加路径。
#!/home/tim/anaconda3/bin/python
import sys
sys.path.insert(1, '/usr/local/lib/python3.5/dist-packages')
添加回答
举报
0/150
提交
取消