如何 运行 aws lambda /tmp 目录中的 python 脚本

How to run a python script in aws lambda /tmp directory

我已经从 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
...

在 lambda 中 运行ning 时,出现以下错误:

ModuleNotFoundError: No module named 'gevent'

我已经将 gevent 模块打包到上传到 lambda 的压缩文件中,我相信它们在 /var/task 下。我怎样才能让 /tmp 目录中的 my_script.py 知道在哪里寻找依赖项?

您可以尝试将 /var/task 插入路径,如下所示:

import os
import sys
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '../var/task')))

import gevent

假设上面的脚本在 /tmp 中,gevent 模块在 /var/task.

我通过在环境中添加 "PYTHONPATH" = "/var/task" 解决了这个问题。

os.environ["PYTHONPATH"] = "/var/task"
process = subprocess.run("/tmp/my_script.py", env = os.environ, stdout=None, stderr=subprocess.STDOUT)