首页 > 解决方案 > 如何创建一个本地库以与 AWS Lambda 一起使用(处理来自 PIL 库的“无法导入名称'_imaging'”错误)?

问题描述

我正在尝试在我的项目中使用 Pillow Image,将其作为本地库传递给我的 AWS Lambda 函数使用。

这些文件的位置如下:

后端(带有 lambda_handler 代码的文件夹)

库(包含一些用于存储一些库的文件夹的文件夹)

PIL(包含库中文件的文件夹)

我的 lambda_handler 代码正在像这样导入图像:

from Libraries.PIL import Image

我唯一一次使用 Image 是打开一个 Image 作为一个函数的参数。

当我上传和测试 Lambda 函数时,我收到以下错误:

{
    "errorMessage": "Unable to import module 'Backend/lambda_function': cannot import name '_imaging' from 'Libraries.PIL' (/var/task/Libraries/PIL/__init__.py)",
    "errorType": "Runtime.ImportModuleError"
}

我已经卸载了所有 Pillow 版本并尝试只使用一个版本,最新版本(7.2.0)和一些旧版本(6.0.0 和 5.0.0)。

我正在使用 Python 3.7

注意:在本地运行程序一切正常,但是当我在 AWS Lambda 中运行它时,我收到了错误。

标签: pythonamazon-web-servicesaws-lambdapython-imaging-library

解决方案


使用 Pillow 的最简单方法,也可以解决您的问题,是通过Lambda 层

具有此类层(包括枕头)的流行存储库是github 上的keithrozario / Klayers要使用它,您将根据您的 region定位图层的 ARN 。python 3.7 的 ARN 列表在这里

例如,对于us-east-1添加的图层将是:

在此处输入图像描述

在您的函数中,您将按如下方式使用它,例如:

from PIL import Image

推荐阅读