无法向AWS Lambda层添加numpy,导入报错求助
解决AWS Lambda层导入numpy/scipy时的"不能从源码目录导入"错误
错误原因
这个报错的核心是你的Lambda层里的numpy包包含了源码目录结构(比如带.git、setup.py这类文件),Lambda运行时加载时误认为是在numpy源码目录中执行,触发了numpy的保护机制。
修复步骤
1. 正确构建适配Lambda的依赖包
Lambda运行在Amazon Linux环境,本地直接pip安装的包可能不兼容,必须在匹配的环境下构建:
- 使用Docker模拟Lambda环境:
# 拉取Python3.13的Lambda基础镜像 docker pull public.ecr.aws/lambda/python:3.13 # 启动容器并挂载本地目录 docker run -v "$PWD:/var/task" -it public.ecr.aws/lambda/python:3.13 bash # 在容器内安装依赖到指定目录 pip install numpy scipy -t python/lib/python3.13/site-packages/ - 退出容器后,本地会生成
python目录,这就是符合Lambda层要求的结构。
2. 正确打包Lambda层
- 把
python目录打包成zip文件:zip -r numpy-scipy-layer.zip python/ - 注意:zip包的根目录必须是
python,不能是嵌套的子目录(比如不能把包含python目录的文件夹打包)。
3. 更新Lambda层并测试
- 把新的zip包上传到AWS Lambda层,关联到你的Python3.13 Lambda函数。
- 测试函数,确认导入错误消失。
额外注意事项
- 不要直接从numpy的源码仓库下载源码打包,必须通过pip安装得到编译好的、适配Lambda环境的包。
- Python3.13是较新版本,确保使用的Lambda基础镜像版本正确,避免依赖不兼容。
- 检查Lambda函数的执行角色是否有足够权限读取层资源(通常默认权限足够,若出现权限报错再调整)。
内容的提问来源于stack exchange,提问作者thumbtackthief
相关产品推荐
相关产品推荐

