为了账号安全,请及时绑定邮箱和手机立即绑定

无法导入模块“lambda_function”:没有名为 * 的模块

无法导入模块“lambda_function”:没有名为 * 的模块

白板的微信 2023-10-31 14:39:03
我正在尝试运行一个使用附加包的 python lambda 函数。然而,每当我将 .zip 文件上传到 lambda 控制台时,我都会收到错误:{  "errorMessage": "Unable to import module 'lambda_function': No module named '*'",  "errorType": "Runtime.ImportModuleError"}我按照以下说明进行操作:https://docs.aws.amazon.com/lambda/latest/dg/python-package.html#python-package-dependency它告诉我确保我的包位于我的 lambda 本地目录中功能:~/my-function$ pip install --target ./package Pillow我没有使用枕头。这是他们网站上的示例代码。我也没有使用您可以在 Lambda 上访问的包。这是我从 github 获得的,需要附加到我的应用程序中。起初这不起作用,所以我创建了一个setup.cfg文件并添加了:[install]prefix= 现在,当我使用pip命令安装到目标时,它可以工作(并且还添加了除我的包之外的其他文件夹的负载,但我认为需要它们,所以我将它们留在那里。当我进入目录时,包就在那里。然后我找到了这个答案:https://stackoverflow.com/a/12493244/5675125,这表明可能没有包含一些隐藏文件,这就是我应该压缩它们的方式。又出现同样的错误。我如何让 lambda 识别出我的包裹在那里。
查看完整描述

1 回答

?
千万里不及你

TA贡献1784条经验 获得超9个赞

我刚刚创建了自定义图层instabot,可以确认它是否有效。

使用的技术包括最近的AWS 博客中描述的docker 工具

  • 如何使用 Docker 模拟 Lambda 环境创建 Lambda 层?

于是针对这个问题,我验证 如下:

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

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

instabot
  1. 运行以下 Docker 命令:

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. 删除numpy

要求非常大instabotnumpy因此,我们在创建图层之前手动将其删除。我们将使用numpyAWS 提供的层。

sudo rm -rvf ./python/lib/python3.8/site-packages/numpy*

如果我们不删除 numpy,该层将>50MB。

  1. 创建图层为 zip:

zip -9 -r mylayer.zip python
  1. mylayer.zip在AWS控制台中创建基于的lambda层。不要忘记指定Compatible runtimespython3.8.

  2. 向您的函数添加两层:

第一个是AWSLambda-Python38-SciPy1xAWS 随 numpy 提供的,第二个是我们上面创建的。所以你的函数将使用两层。

  1. 使用以下 lambda 函数测试 lambda 中的层:

import json


from instabot import Bot


def lambda_handler(event, context):

    # TODO implement

    

    bot = Bot(base_path='/tmp')

    

    return {

        'statusCode': 200,

        'body': json.dumps('Hello from Lambda!')

    }


查看完整回答
反对 回复 2023-10-31
  • 1 回答
  • 0 关注
  • 67 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信