AWS Lambda依赖导入失败求助:无法加载numpy核心模块
解决AWS Lambda中NumPy导入错误的方案
出现这个错误的核心原因是:你在Windows子系统Ubuntu中打包的NumPy依赖,是基于Ubuntu环境编译的二进制文件,而AWS Lambda运行的是Amazon Linux系统,两者底层系统库(比如glibc)存在差异,导致NumPy的C扩展模块无法被正确加载。升级NumPy不会解决问题,因为编译环境没变。
下面是可行的解决步骤:
1. 在与Lambda兼容的环境中重新打包依赖
方法一:用Docker模拟Lambda环境
- 拉取AWS官方提供的Lambda Python 3.9镜像:
docker pull public.ecr.aws/lambda/python:3.9 - 创建本地目录用于存放依赖,进入该目录:
mkdir lambda-deps && cd lambda-deps - 启动Docker容器并挂载本地目录:
docker run -v "$PWD":/var/task public.ecr.aws/lambda/python:3.9 /bin/bash - 在容器内安装所需依赖到当前目录:
(注:boto3是Lambda运行时自带的,如果不需要特定版本可以不用安装)pip3 install numpy pandas pymysql -t . - 退出容器(执行
exit命令),然后打包目录内的所有内容:zip -r lambda-deps.zip .
方法二:用AWS Cloud9环境打包
- 登录AWS控制台创建Cloud9环境,选择Amazon Linux 2系统,Python版本选3.9
- 在Cloud9终端中创建依赖目录并安装包:
mkdir deps && pip3 install numpy pandas pymysql -t ./deps - 进入deps目录并打包:
cd deps && zip -r ../lambda-deps.zip .
2. 更新Lambda函数的依赖包
- 将新打包的
lambda-deps.zip上传到你的S3存储桶 - 在Lambda控制台中,更新函数代码包(可以直接上传该zip,或者将你的业务代码和依赖合并打包后上传,确保业务代码文件和依赖目录在同一层级)
3. 验证运行环境匹配
- 确认Lambda函数的运行时设置为Python 3.9,和打包时的Python版本完全一致
- 测试函数,此时NumPy的C扩展模块应该能被正常加载
内容的提问来源于stack exchange,提问作者tzhao5
相关产品推荐
相关产品推荐

