如何在AWS Lambda函数中管理Pillow包及解决PIL缺失报错
在AWS Lambda中正确安装Pillow(PIL)的解决方法
Lambda运行环境基于特定的Amazon Linux系统,直接上传本地安装的Pillow包常因系统架构、依赖库不兼容导致无法识别,以下是几种可靠的解决方式:
方法1:使用Lambda层(推荐)
- 借助Docker模拟Lambda环境构建兼容的Pillow包:
- 拉取对应Python版本的Lambda官方镜像(以Python 3.11为例):
docker pull public.ecr.aws/sam/build-python3.11 - 运行容器并挂载本地目录:
docker run -v "$PWD":/var/task -it public.ecr.aws/sam/build-python3.11 /bin/bash - 在容器内将Pillow安装到指定层目录:
pip install pillow>=8.1.1 -t python/lib/python3.11/site-packages/(替换路径中的Python版本为你的函数使用版本) - 退出容器,将
python目录打包为zip:zip -r pillow-layer.zip python/ - 登录AWS控制台,进入Lambda「层」页面上传该zip创建层,再将层关联到目标Lambda函数。
- 拉取对应Python版本的Lambda官方镜像(以Python 3.11为例):
方法2:直接打包兼容依赖到函数部署包
- 同样用Docker构建兼容部署包:
- 进入你的Lambda代码目录,运行对应环境的容器:
docker run -v "$PWD":/var/task -it public.ecr.aws/sam/build-python3.11 /bin/bash - 在容器内将Pillow安装到当前代码目录:
pip install pillow>=8.1.1 -t . - 退出容器,将代码和依赖一起打包:
zip -r lambda-deploy.zip . - 上传该zip包到你的Lambda函数。
- 进入你的Lambda代码目录,运行对应环境的容器:
方法3:使用AWS SAM CLI构建(适合复杂项目)
- 在SAM项目的
requirements.txt中添加pillow>=8.1.1 - 运行构建命令自动生成兼容依赖:
sam build --use-container - 部署到Lambda:
sam deploy --guided
排查要点
- 在函数代码中添加
import PIL; print(PIL.__version__),验证Pillow是否被正确识别及版本是否达标 - 检查部署包目录结构:Python依赖需放在根目录(直接打包时)或
lib/pythonX.X/site-packages/(层时),Lambda才能加载 - 禁止直接上传Windows/macOS本地安装的Pillow包,系统架构差异会导致无法运行
内容的提问来源于stack exchange,提问作者Rushabh Sorathiya
相关产品推荐
相关产品推荐

