You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Lambda函数生成S3缩略图时遇PIL导入失败问题求助

解决Lambda Layer加载PIL模块失败的问题

问题核心

你遇到的Runtime.ImportModuleError本质是Lambda运行时无法找到Layer中的PIL模块,大概率是Layer打包的目录结构不符合Lambda要求,或是版本/关联配置出错。

分步解决建议

1. 检查Layer的目录结构(关键)

Lambda要求Python类库必须放在固定层级的目录下,zip包内部结构必须是:

python/
  lib/
    pythonX.X/  # X.X对应你Lambda使用的Python版本,比如3.9
      site-packages/
        PIL/
        Pillow-xxx.dist-info/

如果你的zip直接把PIL放在根目录,Lambda绝对找不到模块。

2. 重新在Amazon Linux 2上正确打包Pillow

在EC2的Amazon Linux 2实例上执行以下命令(以Python 3.9为例):

# 安装编译依赖
sudo yum install -y python3.9-devel gcc libjpeg-turbo-devel zlib-devel

# 创建并激活虚拟环境
python3.9 -m venv pillow-env
source pillow-env/bin/activate

# 安装Pillow
pip install pillow

# 构建符合Lambda要求的目录结构
mkdir -p python/lib/python3.9/site-packages
cp -r pillow-env/lib/python3.9/site-packages/* python/lib/python3.9/site-packages/

# 打包成zip
zip -r pillow-layer.zip python/

将生成的pillow-layer.zip上传到Lambda Layer即可。

3. 确认Layer与Lambda的匹配性

  • 确保Lambda使用的Python版本和打包Layer时的版本完全一致(比如都是3.9);
  • 检查Lambda函数的「Layers」配置,确认已添加Pillow Layer且版本正确。

4. 修正Lambda代码的缺失依赖

你的代码里遗漏了两个关键import,会导致后续运行报错,完整开头应改为:

import sys
import urllib.parse  # 注意你用的是parse模块,不是request
import boto3
import uuid
from PIL import Image

5. 验证Layer是否生效

可以在Lambda中添加测试代码,确认PIL是否被正确加载:

def lambda_handler(event, context):
    import sys
    print("Python运行路径:", sys.path)
    try:
        import PIL
        print("PIL加载成功,版本:", PIL.__version__)
    except ImportError as e:
        print("PIL导入失败:", e)
    # 原有业务代码...

其他排查点

  • 若用Docker打包,必须基于Lambda官方镜像(如public.ecr.aws/lambda/python:3.9),且打包后的目录结构符合要求;
  • 确认Lambda执行角色的S3权限(此点与模块导入无关,但会影响后续图片处理逻辑)。

内容的提问来源于stack exchange,提问作者Diva Turial

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 11:42:42