提问人:Justin 提问时间:10/5/2023 最后编辑:Justin 更新时间:10/6/2023 访问量:75
如何在 Python 3.11 中在 AWS Lambda 上将 JFIF 转换为 JPEG?使用 Pillow 会产生困难的错误
How to convert JFIF to JPEG on AWS Lambda in Python 3.11? Using Pillow gives difficult error
问:
我尝试使用 Lambda 层让 Pillow 在 x86 上的 AWS Lambda 上运行(我使用计算机上的 docker ubuntu 映像构建了 python 依赖项 zip,我还尝试在 docker Amazon Linux 映像上构建它),但我遇到了我不知道如何修复的错误。错误似乎在线上
from PIL import Image
我通过 lambda 层安装的 Pillow 版本是 10.0.1 我得到的错误是:
[ERROR] Runtime.ImportModuleError: Unable to import module 'lambda_function': cannot import name '_imaging' from 'PIL' (/opt/python/lib/python3.11/site-packages/PIL/__init__.py)
此错误仅在 AWS Lambda 上发生,而不会在我的任何本地计算机上发生。
我不会直接在代码中的任何地方导入“_imaging”,所以我想导入是从 PIL/__init__.py 内部进行的。(尽管当我打开该文件时,我也没有直接在该文件中看到该 import 语句。
我尝试了以下许多其他堆栈溢出答案的建议,包括此处的最佳答案: Python 层映像失败:“无法导入模块 'lambda_function':无法从 'PIL'导入名称 '_imaging'”
最佳答案推荐:
- 使用旧版本的 Pillow(2.1.0 之前版本)
- 找到您导入_imaging的位置,并将其替换为从 PIL 更新的。图像导入核心作为_imaging
- 更新到当前版本的 Pillow
当我尝试使用旧版本的 Pillow (2.0.0) 时,我最终收到以下错误:
Unable to import module 'lambda_function': The _imaging C module is not installed"
当我尝试寻找_imaging的导入位置时,我找不到它(如上所述)。
而且我已经是当前版本的 Pillow,所以我无法更新它。
请帮我弄清楚出了什么问题!或者,如果您对我将 jfif 转换为 jpeg 的方法有其他建议,请告诉我。我尝试了 imageio,但我在 lambda 上遇到了关于 imageio 对 numpy 的依赖性的错误。
谢谢!
答:
我最终以间接的方式解决了这个问题。我没有让库在默认 lambda 上运行,但我最终用我的代码和所有依赖项构建了一个 docker 容器,并通过 ECR 在 lambda 上运行它。所以现在我的整个代码都在一个容器中,而不仅仅是具有依赖关系的层。
评论