在AWS Lambda中使用Pillow层遇'_imaging'导入错误求助
问题描述
在AWS Lambda中添加Pillow包作为层后,执行函数时触发错误:
cannot import name '_imaging' from 'PIL' (/opt/python/PIL/__init__.py)
操作步骤:
- 执行
pip install pillow -t .,将PIL和pillow-10.2.0.dist-info文件夹放入python文件夹并打包为zip,上传至Lambda作为层,运行时选择Python 3.12。 - 在Lambda函数中添加该层,并将函数运行时设置为Python 3.12。
- 代码中调用
from PIL import Image时触发错误。
解决方案
出现这个问题的核心原因是本地系统(Windows/macOS)安装的Pillow和Lambda的Amazon Linux 2023运行时环境不兼容,_imaging是Pillow的底层C扩展模块,本地编译的版本无法在Lambda的Linux环境中运行。
方法1:在Lambda兼容环境中构建Pillow包
使用Amazon Linux 2023容器(匹配Python 3.12的Lambda运行时)来编译安装Pillow:
- 拉取Lambda官方镜像:
docker pull public.ecr.aws/lambda/python:3.12 - 启动挂载本地目录的容器:
docker run -v "$(pwd)":/var/task public.ecr.aws/lambda/python:3.12 bash - 在容器内安装Pillow到指定目录:
pip install pillow -t /var/task/python - 退出容器后,将本地生成的
python文件夹打包为zip,重新上传作为Lambda层。
方法2:检查层的目录结构
确保zip包的内部结构符合Lambda层要求:
python/ ├── PIL/ └── pillow-10.2.0.dist-info/
Lambda会自动将/opt/python添加到Python的sys.path中,错误的目录结构会导致模块无法被正确识别。
内容的提问来源于stack exchange,提问作者SamTest
相关产品推荐
相关产品推荐

