AWS Lambda-无法导入模块“Lambda_function”

2024-04-24 15:03:44 发布

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

像我之前的许多人一样,我试图运行一个AWS Lambda函数,当我试图测试它时,我得到

"errorMessage": "Unable to import module 'lambda_function'"

我的处理程序设置为lambda_function.lambda_Handler,并且我确实有一个名为lambda_function.py的文件,其中包含一个名为lambda_Handler的函数。这是一张截图作为证据: enter image description here

当我在包含的IDE中内联地编写代码片段时,一切正常,但是当我压缩完整的程序及其所有依赖项并将其上载时,我得到了上述错误。

我使用的是Numpy和Scipy软件包,它们相当大。我的压缩目录是34MB,解压缩目录是122MB。我认为这应该没问题,因为压缩目录的限制是50MB。似乎上传得很好,因为我看到消息:

The deployment package of your Lambda function "one-shot-image-classification" is too large to enable inline code editing. However, you can still invoke your function right now.

我已经看到一些帖子通过使用virtualenv解决了这个问题,但我不熟悉这项技术,也不知道如何正确使用它。

我也看到一些文章说,有时依赖关系有依赖关系,我可能需要包括这些,但我不确定如何找到这一点。

下面是lambda_function.py的顶部,它应该足以看到我正在使用的库,并且我确实有一个lambda_handler函数:

import os
import boto3
import numpy as np
from scipy.ndimage import imread
from scipy.spatial.distance import cdist

def lambda_handler(event, context):

    s3 = boto3.resource('s3')

下面是我正在上传的目录的解压版本的截图: enter image description here

如果有问题,我还可以发布Lambda正在使用的策略角色。

任何洞察都是非常感激的!

更新:

我试过一个办法: 一。git clone https://github.com/Miserlou/lambda-packages 2。在名为new_lambda的文档中创建文件夹 三。将lambda_function.py和numpy文件夹从lambda包复制到new_lambda中,以及根据本文使用Docker for AWS编译的scipy库:https://serverlesscode.com/post/scikitlearn-with-amazon-linux-container/ 四。右键单击并选择“压缩”来压缩新的“lambda”文件夹

我的结果:

Unable to import module 'lambda_function': No module named 'lambda_function'

重申一下,我的文件名为lambda_function.py,它包含一个名为lambda_handler的函数,该函数接受两个参数(如上所示)。此信息与上面在Handler中看到的信息相匹配。

如果有关系的话,我用的是Mac电脑。

更新2

如果我按照上面的步骤操作,但是通过直接选择要压缩的文件,然后右键单击并选择“压缩”来压缩文件,则会出现错误

Unable to import module 'lambda_function': cannot import name 'show_config'

另外,预编译的lambda包表示它们是为“至少Python 2.7”编译的,但是我的lambda运行时是3.6。这可能是个问题吗?


Tags: tolambda函数pyimport目录文件夹关系
3条回答

解决方案是压缩来自this源的numpy和scipy预编译包。

我也有类似的问题:

Unable to import module 'lib/lambda_function': No module named 'lib/lambda_function'

对我和可能对您来说,修复方法是在lambda_function.py所在的目录中包含一个空的__init__.py

为什么__init__.py要解决这个问题?

我知道目录(在我的例子中是lib)需要它。在您的)中被视为有效的Python包。

这是一份参考文件,基于以下假设: 5.2.1. Regular packages - Python 3.7.3 documentation

问题是,您的本地numpy和pandas是为本地机器的体系结构编译的。因为AWS Lambda使用定制Linux,所以它们可能不兼容。

所以如果你想使用它们,你有两个选择:

  • 编译对使用相同Amazon Linux的EC2实例的依赖关系 版本为AWS Lambda并创建部署包。

  • 使用here中的一个预编译包

另外,我已经阅读了一篇文章的评论,所以我发现文件和函数的名称没问题,numpy给你带来了麻烦。

相关问题 更多 >