在AWS Lambda的部署包中找不到模块

2024-09-27 17:47:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我在virtualenv中安装了ujson包

(mylambdaenv) C:\Users\xyz\lambda_code\mylambdaenv>pip install ujson
    Collecting ujson
      Using cached ujson-4.0.2-cp36-cp36m-win_amd64.whl (43 kB)
    Installing collected packages: ujson
    Successfully installed ujson-4.0.2

但是,在运行包时,它失败了,错误为no module ujson。我的包中有一个文件名为ujson.cp36-win\u amd64&;一个文件夹ujson-4.0.2.dist info。AWS Lambda不可读吗?请帮忙解决 错误

import ujson
ModuleNotFoundError: No module named 'ujson'

Tags: installpiplambdavirtualenv错误codewinusers
1条回答
网友
1楼 · 发布于 2024-09-27 17:47:35

根据我的经验,向lambda函数添加依赖项的最佳方法是通过lambda layers和使用最近的AWS博客中描述的docker工具

因此,您可以按如下方式向函数中添加ujson

  1. 创建空文件夹,例如mylayer

  2. 转到该文件夹并创建包含以下内容的requirements.txt文件:

echo ujson > ./requirements.txt
  1. 运行以下docker命令:

该命令将为python3.8创建图层:

docker run -v "$PWD":/var/task "lambci/lambda:build-python3.8" /bin/sh -c "pip install -r requirements.txt -t python/lib/python3.8/site-packages/; exit"
  1. 将图层存档为zip:
zip -9 -r mylayer.zip python 
  1. 基于AWS控制台中的mylayer.zip创建lambda层。不要忘记指定Compatible runtimepython3.8

  2. 将步骤6中创建的层添加到函数中

  3. 使用以下lambda函数在lambda中测试层:

import ujson

def lambda_handler(event, context):
    
    print(dir(ujson))

我对此进行了测试,并正确地测试了功能和层工作:

['__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '__version__', 'decode', 'dump', 'dumps', 'encode', 'load', 'loads']

附言

以上步骤是在linux上执行的。如果没有,您可以创建EC2Linux实例,并根据需要在那里执行步骤

相关问题 更多 >

    热门问题