我从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中运行时,我得到了以下错误。
ModuleNotFoundError: No module named 'gevent'
我已经打包了 gevent
模块上传至lambda的压缩文件中,我相信他们是在 /var/task
. 我怎么能让 my_script.py
在 /tmp
目录下知道在哪里查找依赖关系吗?
你可以尝试在路径中插入vartask,像这样。
import os
import sys
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '../var/task')))
import gevent
假设上面的脚本在tmp里,而event模块在vartask里。
我通过在env中添加 "PYTHONPATH" = "vartask "来解决这个问题。
os.environ["PYTHONPATH"] = "/var/task"
process = subprocess.run("/tmp/my_script.py", env = os.environ, stdout=None, stderr=subprocess.STDOUT)