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

在AWS Lambda(Python 2.7)中部署PIL/Pillow库遇模块找不到问题求助

解决AWS Lambda Python 2.7环境下PIL/Pillow导入失败的问题

嘿,我太懂在AWS Lambda的Python 2.7环境里折腾Pillow的痛苦了——这个老环境确实坑不少,不过我整理了几个亲测有效的解决办法,帮你搞定这个no module named PIL的问题:

1. 先盯紧你的部署包结构

很多时候找不到模块都是路径不对搞的鬼!Lambda只会从代码根目录(也就是/var/task)和系统标准库路径里加载模块,所以你的ZIP包解压后必须是这样的结构:

lambda_function.py  # 你的主函数文件
PIL/                # Pillow的核心库文件夹
Pillow-2.9.0.dist-info/  # 对应的版本信息文件夹

绝对不能把这些文件嵌套在子文件夹里(比如src/lambda_function.py或者lib/PIL),否则Lambda根本找不到它们。

2. 用正确的pip命令安装兼容版本

Python 2.7的Pillow版本不能太新,而且要确保是针对Lambda的Amazon Linux 1环境编译的:

  • 如果你本地用的是Amazon Linux 1(和Lambda Python 2.7底层环境一致),直接在代码目录下运行:
    pip install pillow==2.9.0 -t .
    
    选2.9.0是因为这个版本对Python2.7兼容性拉满,完美适配Lambda环境。
  • 如果是Windows/Mac本地环境,直接pip安装的库会因为系统架构不同在Lambda上报错,这时候就必须用预编译的适配包,但要找对针对Python2.7 + Amazon Linux的版本。

3. 预编译库的命名适配

你提到重命名的情况,很多预编译包会把库文件夹命名为Pillow而不是PIL,这时候直接把Pillow文件夹重命名为PIL就行——别担心,里面的代码逻辑都是兼容的,重命名后就能被import PIL识别到。

另外要注意:别拿Python3的预编译包凑数,必须选明确标注支持Python2.7的版本,不然肯定会报错。

4. 验证导入路径(必要时手动添加)

有时候Lambda的自动路径配置可能出问题,你可以在代码开头加一段调试代码,看看根目录是否在加载路径里:

import sys
print("当前加载路径:", sys.path)

如果/var/task不在列表里,手动加上就行:

import sys
sys.path.append('/var/task')
from PIL import Image

不过正常情况下Lambda会自动把/var/task加入路径,这一步只是用来排查极端情况。

5. 正确压缩你的部署包

最后一步别踩坑:压缩的时候要进入到包含lambda_function.py和PIL的目录里,直接压缩里面的所有内容,而不是压缩整个父文件夹。比如在Linux/macOS终端里执行:

zip -r lambda_deploy.zip .

这样压缩出来的ZIP包,解压后所有文件都在根目录,Lambda才能正确识别。

内容的提问来源于stack exchange,提问作者Spencer Goff

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:45:17