我有一个文件,里面有这个。
def print_hello_world():
print ('Hello World')
它被压缩在一个文件夹中,文件夹中有一个__init__.py
文件。
我将其添加为层,并设置python3.6的正确运行时。
如何通过lambda代码将它导入到我的lambda函数中?
编辑:经过研究,我发现lambda将层挂载到/opt,如果您通过sys.path.insert(0,'/opt')将/opt添加到您的syspath,那么您就可以导入您的层。
您可以在以下位置查看图层:打印(操作系统列表目录(“/opt”))
一定有更优雅的方式来做这件事!
4条答案
按热度按时间osh3o9ms1#
所以我最近遇到了这个问题,我相信我找到了一个更干净的方法来导入你的层。
首先是您上传的zip文件的结构:
__init__.py
文件python
的文件夹中import {filename}
因此,如果您在
python
文件夹中的脚本的名称类似于custom_helper.py
,请使用import custom_helper
将其导入lambda。我不确定这是否是一种干净的方法,但它似乎很容易开始。
vq8itlhq2#
您的zip文件应具有以下结构:
python/库/python3.7/站点包
也就是说,它需要一个名为Python的文件夹,其中一个名为lib的文件夹,其中一个名为python3.7的文件夹,其中一个名为site-packages的文件夹。
(If您使用的是Python的另一个版本,该版本应该在路径中,而不是3.7)
ikfrs5lh3#
您必须:
1.使用Docker构建lambda层:
sudo docker run -v "$PWD":/var/task "lambci/lambda:build-${penv}" /bin/sh -c "pip install -r requirements.txt -t python/lib/${penv}/site-packages/; exit"
1.将图层上传到AWS
1.将图层添加到lambda
1.导入前Lambda中的Modity
sys.path
**更新:**看起来您需要将build放在/opt/python下,以便在没有
sys.path.append('/opt/python/lib/python3.7/site-packages');
的情况下使用它新构建步骤:
现在添加层到lambda函数,您可以导入:
cbwuti444#
您必须将使用pip install ...安装的所有软件包分配到一个zip文件中,该文件以以下文件结构结尾:
另一种无聊的方式是:
用这种结构你的lambda代码得到你所拥有的模块。
我希望这能解决你的问题。