如何在AWS Lambda中导入Numpy和Pandas并处理CSV文件?
解决AWS Lambda中无法导入Numpy/Pandas的问题
我之前也踩过完全一样的坑!本地跑好好的代码,一放到Lambda就报No module named 'numpy',哪怕打包了依赖也没用——核心原因是你在Windows/macOS上打包的依赖和Lambda的Amazon Linux运行环境不兼容,系统架构、编译后的二进制文件都不一样,Lambda根本识别不了。下面给你几个亲测有效的解决方案:
方案1:使用Lambda层(Layers)管理依赖(最推荐,长期维护更省心)
Lambda层可以把依赖和代码分离,还能重复用到多个函数里,步骤如下:
- 构建兼容Lambda环境的依赖包
- 用Docker模拟Lambda环境是最方便的方式:
- 拉取对应Python版本的Lambda基础镜像(比如你用Python 3.9):
docker run -it --rm public.ecr.aws/lambda/python:3.9 /bin/bash - 在容器里创建目标目录并安装依赖:
mkdir -p python/lib/python3.9/site-packages pip install numpy pandas -t python/lib/python3.9/site-packages - 退出容器,把容器里的
python目录拷贝到本地:docker cp <容器ID>:python ./lambda-layer - 进入
lambda-layer目录,压缩成zip包:cd lambda-layer zip -r numpy-pandas-layer.zip python/
- 拉取对应Python版本的Lambda基础镜像(比如你用Python 3.9):
- 你也可以用AWS EC2的Amazon Linux实例打包,原理和Docker一致,都是在和Lambda匹配的环境里安装依赖。
- 用Docker模拟Lambda环境是最方便的方式:
- 创建Lambda层并关联函数
- 登录AWS控制台,进入Lambda服务,左侧菜单选「层」→「创建层」
- 上传刚才的
numpy-pandas-layer.zip,选择对应Python版本,命名后保存 - 回到你的Lambda函数,在「层」模块点击「添加层」,选择刚创建的层,保存后测试函数即可
方案2:本地构建兼容的部署包(适合快速测试,不想用层的情况)
如果你不想用层,可以直接在本地跨平台安装兼容Lambda的依赖:
- 打开终端,创建空的
package目录:mkdir package && cd package - 用pip安装跨平台兼容的依赖(替换成你Lambda用的Python版本,比如3.9):
pip install --platform manylinux2014_x86_64 --target ./ --implementation cp --python-version 3.9 --only-binary=:all: numpy pandas - 把你的
lambda_function.py复制到package目录下 - 压缩
package目录里的所有内容(注意:不要压缩package文件夹本身,要选中里面的所有文件和子文件夹再压缩) - 把这个zip包上传到Lambda函数,替换原来的部署包即可
方案3:检查打包的正确姿势(很多人在这里犯错)
如果已经尝试打包但还是报错,大概率是打包结构不对:
- ❌ 错误做法:把虚拟环境(比如
venv)整个打包进去,或者把依赖放在子文件夹里,Lambda不会去这些路径查找模块 - ✅ 正确结构:你的
lambda_function.py和numpy、pandas等依赖包要在同一层级;如果用层,层的结构必须是python/lib/pythonX.X/site-packages/(X.X是Python版本)下面存放依赖
方案4:使用Lambda容器镜像(适合复杂依赖场景)
如果你的依赖不止numpy/pandas,或者经常遇到环境兼容问题,可以用容器镜像部署:
- 创建
Dockerfile,内容如下(替换成你的Python版本):FROM public.ecr.aws/lambda/python:3.9 COPY requirements.txt . RUN pip install -r requirements.txt --target "${LAMBDA_TASK_ROOT}" COPY lambda_function.py ${LAMBDA_TASK_ROOT} CMD ["lambda_function.lambda_handler"] - 同目录下创建
requirements.txt,写入:numpy pandas - 构建镜像并推送到AWS ECR(弹性容器注册表)
- 在Lambda控制台选择「容器镜像」创建函数,选择你推送到ECR的镜像即可
额外注意事项
- 确保Lambda函数的Python版本和你安装依赖时指定的版本完全一致(比如都是3.9)
- 注意Lambda的大小限制:部署包压缩后不能超过50MB,解压后不超过250MB;层的压缩包不能超过50MB,多个层累加解压后不超过250MB
- 如果还是报错,可以在Lambda函数的「配置」→「环境变量」里添加
PYTHONPATH=/var/task,确保模块路径正确
内容的提问来源于stack exchange,提问作者Anbarasu Subramaniyan
相关产品推荐
相关产品推荐

