You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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/
  • 把刚才解压得到的PILPillow-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

火山引擎 最新活动