无法在AWS Lambda函数中导入图层

时间:2019-12-24 07:06:26

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

我正在使用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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

pip install --target drive/location PIL

此解决方案无需使用图层。