Serverless Flask Python应用部署Lambda后Numpy导入失败求助
解决AWS Lambda中Serverless Flask应用无法导入NumPy的问题
这个ModuleNotFoundError: No module named 'numpy.core._multiarray_umath'错误本质是NumPy的二进制编译版本与Lambda运行环境不兼容——你本地(比如macOS/Windows)安装的NumPy是针对本地系统架构编译的,而Lambda用的是Amazon Linux环境,底层C扩展文件不匹配。下面是具体解决步骤:
1. 启用Serverless Python Requirements的Docker编译功能
修改你的serverless.yml,在custom下的pythonRequirements配置中添加dockerizePip: true,让工具在Lambda兼容的Amazon Linux环境中安装依赖:
custom: pythonRequirements: dockerizePip: true # 如果你用的是ARM架构的Lambda(比如Graviton2),追加下面一行 # dockerImage: amazon/aws-lambda-python:3.9-arm64
2. 清理缓存并重新部署
删除本地残留的旧依赖和部署缓存,避免干扰:
rm -rf .serverless node_modules requirements.zip
然后重新运行部署命令:
sls deploy
这时候工具会自动拉取Amazon Linux的Docker镜像,在容器内安装依赖,生成的包完全适配Lambda环境。
3. 确认requirements.txt版本正确
确保你的requirements.txt里明确指定了兼容的NumPy版本,不要有版本冲突:
numpy==1.22.0 flask==2.2.2 # 替换成你实际使用的Flask版本 # 其他依赖包...
4. 手动构建依赖(如果上述方法仍无效)
如果自动编译还是有问题,可以手动在Lambda兼容环境中打包依赖:
- 拉取Lambda对应的Python镜像:
docker run -v "$PWD":/var/task public.ecr.aws/sam/build-python3.9:latest /bin/bash - 在容器内创建虚拟环境并安装依赖:
python3.9 -m venv venv source venv/bin/activate pip install -r requirements.txt -t ./package - 退出容器后,将
package目录下的所有文件替换到Serverless生成的依赖包中,再重新部署。
内容的提问来源于stack exchange,提问作者Tino kurimwi
相关产品推荐
相关产品推荐

