如何导入Python lambda层?

mspsb9vt  于 2023-01-19  发布在  Python
关注(0)|答案(4)|浏览(157)

我有一个文件,里面有这个。

def print_hello_world():
    print ('Hello World')

它被压缩在一个文件夹中,文件夹中有一个__init__.py文件。
我将其添加为层,并设置python3.6的正确运行时。
如何通过lambda代码将它导入到我的lambda函数中?
编辑:经过研究,我发现lambda将层挂载到/opt,如果您通过sys.path.insert(0,'/opt')将/opt添加到您的syspath,那么您就可以导入您的层。
您可以在以下位置查看图层:打印(操作系统列表目录(“/opt”))
一定有更优雅的方式来做这件事!

osh3o9ms

osh3o9ms1#

所以我最近遇到了这个问题,我相信我找到了一个更干净的方法来导入你的层。
首先是您上传的zip文件的结构:

  • 您不需要__init__.py文件
  • 将所有要导入的脚本放入名为python的文件夹中
  • 压缩python文件夹(选择所需的任意名称)并将其上传到图层
  • 一旦上传,并且在lambda函数中配置了图层,就可以简单地将其用于import {filename}

因此,如果您在python文件夹中的脚本的名称类似于custom_helper.py,请使用import custom_helper将其导入lambda。
我不确定这是否是一种干净的方法,但它似乎很容易开始。

vq8itlhq

vq8itlhq2#

您的zip文件应具有以下结构:

python/库/python3.7/站点包

也就是说,它需要一个名为Python的文件夹,其中一个名为lib的文件夹,其中一个名为python3.7的文件夹,其中一个名为site-packages的文件夹。
(If您使用的是Python的另一个版本,该版本应该在路径中,而不是3.7)

ikfrs5lh

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

import sys; 
    sys.path.append('/opt/python/lib/python3.7/site-packages');
    import apsw
    print(apsw.__file__)

/opt/python/lib/python3.7/site-packages/apsw.cpython-37m-x86_64-linux-gnu.so

**更新:**看起来您需要将build放在/opt/python下,以便在没有sys.path.append('/opt/python/lib/python3.7/site-packages');的情况下使用它

新构建步骤:

mkdir -vp my-layer/python && cd my-layer/python
python3 -m pip install click -t ./ 
cd ..
zip -r9 my-layer python

现在添加层到lambda函数,您可以导入:

import click
cbwuti44

cbwuti444#

    • 解决方案**

您必须将使用pip install ...安装的所有软件包分配到一个zip文件中,该文件以以下文件结构结尾:

[your zip file].zip
|_python/
  |_all.../
  |_your.../
  |_packages, modules.../

另一种无聊的方式是:

[your zip file].zip
|_python/
  |_lib/
    |_python3.x/
      |_site-packages/
        |_all.../
        |_your.../
        |_packages, modules.../

用这种结构你的lambda代码得到你所拥有的模块。
我希望这能解决你的问题。

相关问题