【问题标题】:Cannot import layers in aws lambda function无法在 aws lambda 函数中导入图层
【发布时间】:2023-03-30 12:10:01
【问题描述】:

我正在用 python3.6 开发一个 lambda 函数。它使用 pytesseract 库将图像转换为文本。我创建了具有以下文件夹结构的图层。

python/lib/python3.6/site-packages/PIL
python/lib/python3.6/site-packages/Pillow-6.2.1.dist-info
python/lib/python3.6/site-packages/pytesseract
python/lib/python3.6/site-packages/pytesseract-0.3.1.dist-info

压缩的“python”文件夹(如上所示)并上传到 AWS 中的层。

我的 lambda 函数代码如下。我的代码在python3.6中

from PIL import Image
import pytesseract
import json

def lambda_handler(event, context):
    print(pytesseract.image_to_string(Image.open('image002.jpg')))
    return {
        'statusCode': 200,
        'body': json.dumps('Hello from Lambda!')
    }

但是当我运行代码时出现以下错误

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

这个错误是因为找不到枕头库(PIL)。但它已经包含在 site-packages 文件夹中。我相信层的文件夹结构会有一些错误。

我已经按照以下链接的指导尝试了文件夹结构,但没有成功:

https://stackoverflow.com/a/55711008/1030951

https://docs.aws.amazon.com/lambda/latest/dg/configuration-layers.html

【问题讨论】:

  • 你有什么解决办法吗?我面临同样的问题。 @HarshIT
  • @Jyotirmay ,我在下面添加了我的答案。
  • 很晚了,虽然我赞成。我想我当时做了一些解决方法来解决这个问题。哈哈哈。无论如何,谢谢。

标签: python-3.x amazon-web-services aws-lambda


【解决方案1】:

经过长期研究,我发现 PIL 库在内部使用 C 代码,并且在 python 环境的 lambda 函数中不直接支持,因此我无法在该函数中导入 PIL。正确的解决方案是使用 ECS 并部署我自己的 Docker 映像来执行此类操作。

【讨论】:

    【解决方案2】:

    使用 pip install 中的 --target 选项下载库 PIL 并将该 lib 文件放入 lambda zip 文件中,然后上传。

    pip install --target drive/location PIL

    此解决方案不使用图层。

    【讨论】:

    • 我最近也尝试过这种结构,但仍然是同样的错误。在此链接中查看我的文件夹结构截图:pasteboard.co/IMHDKnA.png
    • 那么这个错误不是因为PIL包。它说 - unable to import module lambda_function 。 lambda 配置可能有错误。
    • 好吧是'无法导入模块lambda_function',因为它是“无法导入名称_imaging”。整个错误信息是这样的
    猜你喜欢
    • 2021-09-25
    • 2020-12-04
    • 1970-01-01
    • 2021-07-07
    • 2020-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-23
    相关资源
    最近更新 更多