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

在AWS Lambda中用Pandas读取S3 Excel文件时遇openpyxl依赖缺失问题

解决AWS Lambda中Pandas读取Excel提示“Missing optional dependency 'openpyxl'”的问题

可能的原因及解决步骤

1. 检查Lambda层的打包结构是否正确

Lambda层的依赖必须放在对应Python版本的site-packages目录下,否则Python解释器无法识别。正确的压缩包结构应该是:

layer.zip
└── python
    └── lib
        └── python3.x  # 替换为你Lambda使用的Python版本(如3.9、3.10)
            └── site-packages
                ├── pandas/
                ├── numpy/
                ├── openpyxl/
                └── ... 其他依赖文件

若你直接把依赖放在python/根目录,或版本目录与Lambda运行环境不匹配,会导致依赖无法被加载。

2. 确保打包环境与Lambda运行环境一致

Lambda运行环境基于Amazon Linux 2,在Windows/macOS本地打包可能生成系统不兼容的依赖文件(如.so库)。推荐用Docker模拟Lambda环境打包:

# 以Python3.9为例,将当前目录挂载到容器,安装依赖到指定路径
docker run -v "$PWD":/var/task public.ecr.aws/sam/build-python3.9:latest /bin/sh -c "pip install pandas numpy openpyxl pytz -t ./python/lib/python3.9/site-packages/; exit"

打包时直接压缩python文件夹即可。

3. 验证Pandas与openpyxl的版本兼容性

部分Pandas版本对openpyxl有最低版本要求,比如Pandas 2.x需要openpyxl 3.0及以上版本。可指定兼容版本安装:

pip install pandas==2.1.4 numpy==1.26.2 openpyxl==3.1.2 pytz==2023.3.post1 -t ./python/lib/python3.9/site-packages/

4. 在Lambda代码中手动验证依赖加载

在Lambda函数开头添加调试代码,先确认openpyxl能否正常导入:

import sys
# 添加层的依赖路径到sys.path(替换为你的Python版本)
sys.path.append('/opt/python/lib/python3.9/site-packages')

try:
    import openpyxl
    print("✅ openpyxl 导入成功")
except ImportError as e:
    print(f"❌ 导入失败: {str(e)}")

import pandas as pd
# 后续读取Excel的代码
df = pd.read_excel('s3://your-bucket/path/to/file.xlsx', engine='openpyxl')

如果openpyxl导入失败,说明层的结构或路径存在问题;若导入成功但Pandas仍报错,尝试降级/升级Pandas版本。

5. 确认Lambda层已正确关联到函数

进入Lambda函数的配置页面,检查“层”部分是否已添加你的自定义层,且使用的是最新版本的层。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 23:25:26