python - 如何创建一个本地库以与 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 中运行它时,我收到了错误。
解决方案
使用 Pillow 的最简单方法,也可以解决您的问题,是通过Lambda 层。
具有此类层(包括枕头)的流行存储库是github 上的keithrozario / Klayers。要使用它,您将根据您的 region定位图层的 ARN 。python 3.7 的 ARN 列表在这里。
例如,对于us-east-1
添加的图层将是:
在您的函数中,您将按如下方式使用它,例如:
from PIL import Image
推荐阅读
- artifactory - 错误 - 人工响应:405 Method Not Allowed
- python - 将文件中的所有变量导入列表
- blockchain - 从主网(以太坊)上的其他智能合约调用部署合约的功能是否可行(就gas成本而言)?
- python-3.x - 是否有为模型声明计算键的模式?
- json - 如何解析嵌套的 JSON 字典(地图)
- r - 使用 R 下载彭博终端的信息
- linux-kernel - 在 Linux Kernel 5.3 上安装 Broadcom 的 PCI/PCIe 软件开发工具包
- javascript - 尽管我已将值推送到 foreach 内的同一个数组,但一个空数组正在返回
- r - R:如何在 aw_weight() 函数中添加变量作为参数?
- r - 将数据框与R中的嵌入式数据框绑定的行?