我正在使用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
答案 0 :(得分:1)
经过长时间的研究,我发现 PIL 库在内部使用 C 代码,并且在 Python 环境的 lambda 函数中不直接支持,因此我无法在该函数中导入 PIL。正确的解决方案是使用ECS并部署我自己的Docker镜像来执行此类操作。
答案 1 :(得分:0)
在pip install中使用--target选项下载库PIL,并将该lib文件放置在lambda zip文件中,然后将其上传。
pip install --target drive/location PIL
此解决方案无需使用图层。