如何在 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

提问人:Justin 提问时间:10/5/2023 最后编辑:Justin 更新时间:10/6/2023 访问量:75

问:

我尝试使用 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'”

最佳答案推荐:

  1. 使用旧版本的 Pillow(2.1.0 之前版本)
  2. 找到您导入_imaging的位置,并将其替换为从 PIL 更新的。图像导入核心作为_imaging
  3. 更新到当前版本的 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 的依赖性的错误。
谢谢!

python amazon-web-services python-imaging-library aws-lambda-layers

评论

0赞 Mark Setchell 10/5/2023
Pillow 是 10 左右的版本,版本 2 一定是驴子的岁。

答:

0赞 Justin 10/6/2023 #1

我最终以间接的方式解决了这个问题。我没有让库在默认 lambda 上运行,但我最终用我的代码和所有依赖项构建了一个 docker 容器,并通过 ECR 在 lambda 上运行它。所以现在我的整个代码都在一个容器中,而不仅仅是具有依赖关系的层。