AWS Lambda关联自定义Pillow层后仍提示“找不到PIL模块”的问题求助
AWS Lambda关联自定义Pillow层后仍提示“找不到PIL模块”的问题求助
看起来你已经尝试了不少方法,但核心问题大概率出在Lambda层的目录结构不符合要求,或者wheel包的解压/放置方式不对。结合你没有Docker/EC2权限、无法使用Klayers的情况,我给你一套手动构建正确Pillow层的步骤,应该能解决问题:
1. 确保下载了完全匹配的Pillow Wheel包
你需要下载Python 3.9对应、Linux x86_64架构的官方Wheel包,文件名应该类似:Pillow-11.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- 注意:必须是
cp39(对应Python3.9)、manylinux开头的Linux版本,不要下错成Windows或其他Python版本的包。
2. 严格按照Lambda层要求构建目录结构
Lambda的Python层对目录结构有强制要求——包文件必须放在python/lib/pythonX.X/site-packages/路径下,这样Lambda运行时才能正确识别。具体操作:
- 把下载的Wheel包后缀改成
.zip,解压后会得到PIL文件夹和Pillow-11.3.0.dist-info文件夹 - 在本地创建如下目录链:
python/lib/python3.9/site-packages/ - 把刚才解压得到的
PIL和Pillow-11.3.0.dist-info直接放到site-packages目录下 - 最后,把整个
python文件夹打包成ZIP(关键:ZIP的根目录就是python文件夹,不能有额外的外层文件夹)
3. 重新上传并更新你的SAM层
- 将新打包好的ZIP上传到S3的
lambda/layers/picoe-prd-pillow-11.3-layer.zip位置(覆盖原文件) - 保持你的SAM模板不变(模板里的
CompatibleRuntimes和Python3.9匹配是对的),重新部署层 - 确认Lambda函数已经关联了这个更新后的层,并且函数的运行时确实是
python3.9
备选方案:用pip直接生成符合要求的目录
如果手动解压容易出错,你可以在Windows本地用pip直接下载并安装到指定目录:
打开命令提示符,运行:
pip install Pillow==11.3.0 --platform manylinux_2_17_x86_64 --only-binary=:all: --target ./python/lib/python3.9/site-packages
这个命令会自动下载匹配Linux x86_64、Python3.9的Pillow包,并安装到指定的目录结构里,之后直接打包python文件夹即可。
为什么之前的尝试失败?
- 你之前把PIL直接放到
python子文件夹,缺少lib/python3.9/site-packages这一层,Lambda运行时无法在正确的路径下找到PIL模块 - 用Windows版本的包会出现
_imaging导入错误,因为Lambda是Linux环境,依赖的底层编译文件不兼容
内容来源于stack exchange




