Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在aws lambda/tmp目录中运行python脚本_Python_Amazon Web Services_Aws Lambda_Subprocess - Fatal编程技术网

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

如何在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 ..

我已经从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
下。如何让
/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)