从bash脚本执行Python程序时发生ModuleNotFoundError
我有一个脚本,它使用从bash脚本执行Python程序时发生ModuleNotFoundError,bash,python-3.x,ubuntu-16.04,boto3,Bash,Python 3.x,Ubuntu 16.04,Boto3,我有一个脚本,它使用inotify工具监视目录。将新文件添加到目录时,脚本将调用python程序,并将路径和填充名作为参数传递 除了我得到一个modulenofounderror。。。所讨论的模块是boto3(适用于AWS S3) python脚本在Pycharms中运行良好,因此我真的不知道是什么导致了错误 监视脚本: source=$1 pythonscriptlocation=$2 inotifywait -m $source -e create -e moved_to | while
inotify工具
监视目录。将新文件添加到目录时,脚本将调用python程序,并将路径和填充名作为参数传递
除了我得到一个modulenofounderror
。。。所讨论的模块是boto3(适用于AWS S3)
python脚本在Pycharms中运行良好,因此我真的不知道是什么导致了错误
监视脚本:
source=$1
pythonscriptlocation=$2
inotifywait -m $source -e create -e moved_to |
while read path action file; do
python $pythonscriptlocation $path $file
done
Python脚本示例:
import argparse
import boto3
parser = argparse.ArgumentParser();
parser.add_argument("source_path");
parser.add_argument("filename");
args = parser.parse_args();
print(args.source_path);
print(args.filename);
更新-解决方案
原来,
ANACONDA
在我的.bashrc
文件的底部添加了一个环境变量。。。结果,它搞砸了我的路径
。删除了这一行,然后又出现了一个问题:在监控脚本中,我调用了python
,但应该调用python3
如何启动此脚本?我猜您运行的用户环境在某种程度上与交互环境不同。最可能的原因是您在这两个环境中设置了不同的PYTHONPATH环境变量——在运行Python代码之前,请尝试将其打印出来,看看是否不同
另一种可能性是,您在两个环境中设置的路径不同,并且您甚至没有运行相同的Python版本。检查您的路径环境变量,看看它们是否相同
这些可能不同的一个原因是,脚本工作的交互环境从.profile文件中获取这些或其他配置。.profile仅由登录shell读取,而不是由其他shell读取。将这些内容放在.bashrc而不是.profile中可能会有所不同
(不用说,如果您在这两个环境中以不同的用户身份运行,那么相关的环境变量需要出现在两个用户的配置中。)您如何启动此脚本?我猜您运行的用户环境在某种程度上与交互环境不同。最可能的原因是您在这两个环境中设置了不同的PYTHONPATH环境变量——在运行Python代码之前,请尝试将其打印出来,看看是否不同 另一种可能性是,您在两个环境中设置的路径不同,并且您甚至没有运行相同的Python版本。检查您的路径环境变量,看看它们是否相同 这些可能不同的一个原因是,脚本工作的交互环境从.profile文件中获取这些或其他配置。.profile仅由登录shell读取,而不是由其他shell读取。将这些内容放在.bashrc而不是.profile中可能会有所不同
(不用说,如果您在这两个上下文中以不同的用户身份运行,那么相关的环境变量需要出现在两个用户的配置中。)只是想看看从
bash
脚本方面看情况是否良好,您是否尝试打印这些值以查看它们是否良好,还要双引号引用您的参数,python“$pythonscriptlocation”“$path”“$file”
@ini谢谢,但是我已经设法找出了问题所在…您应该始终使用独立的python开发环境,例如virtualenv
或conda
。只是想看看从bash
脚本方面看事情是否正常,您是否尝试打印值以查看它们是否正常,是否还双重引用了您的参数,python“$pythonscriptlocation”“$path”“$file”
@Inian谢谢,但我已经设法找出了问题所在……您应该始终使用独立的python开发环境,例如virtualenv
或conda
。我发现了Anaconda(我以前安装过)在.bashrc
中添加了一行内容,这会弄乱我的路径。非常感谢。我还发现我必须调用python3
,而不是python
。。。真他妈烦躁!一个接一个的问题#rantover.我发现Anaconda(我以前安装过)在.bashrc
中添加了一行,这把我的路径弄得一团糟。非常感谢。我还发现我必须调用python3
,而不是python
。。。真他妈烦躁!一个接一个的问题#兰托弗。