如何在aws lambda/tmp目录中运行python脚本
我已经从git下载了一个脚本到如何在aws lambda/tmp目录中运行python脚本,python,amazon-web-services,aws-lambda,subprocess,Python,Amazon Web Services,Aws Lambda,Subprocess,我已经从git下载了一个脚本到/tmp目录,我需要在lambda中运行该脚本。我的处理程序如下所示: def handler(event, context): process = subprocess.run("/tmp/my_script.py", env = os.environ, stdout=None, stderr=subprocess.STDOUT) 但是,my_script.py有一些外部依赖项,例如gevent # my_script.py import gevent ..
/tmp
目录,我需要在lambda中运行该脚本。我的处理程序如下所示:
def handler(event, context):
process = subprocess.run("/tmp/my_script.py", env = os.environ, stdout=None, stderr=subprocess.STDOUT)
但是,my_script.py
有一些外部依赖项,例如gevent
# my_script.py
import gevent
...
在lambda中运行时,出现以下错误:
ModuleNotFoundError: No module named 'gevent'
我已经将
gevent
模块打包在上传到lambda的压缩文件中,我相信它们在/var/task
下。如何让/tmp
目录中的my_script.py
知道在哪里查找依赖项?您可以尝试在路径中插入/var/task,如下所示:
导入操作系统
导入系统
sys.path.insert(0,os.path.abspath(os.path.join(os.path.dirname(__文件,'../var/task'))
导入gevent
假设上面的脚本位于/tmp中,gevent模块位于/var/task中。我通过在env中添加“PYTHONPATH”=“/var/task”解决了这个问题
谢谢你的回答!但问题是脚本是从git克隆的,我无法编辑它。或者我甚至应该编辑它(看起来有点黑)?我想知道调用子进程时是否有方法指定路径?问题解决了!在env中添加“PYTHONPATH”=“/var/task”解决了这个问题。
os.environ["PYTHONPATH"] = "/var/task"
process = subprocess.run("/tmp/my_script.py", env = os.environ, stdout=None, stderr=subprocess.STDOUT)