含Numpy的AWS Lambda压缩包无法运行,请求技术支持
解决AWS Lambda(Python 3.6)加载Numpy的依赖问题
我之前部署Lambda Python函数时也踩过Numpy依赖的坑,结合你遇到的virtualenv操作全局包的问题,给你几个可行的解决方向:
1. 用Lambda兼容环境打包Numpy
Lambda运行在Amazon Linux系统上,本地Windows/Mac安装的Numpy二进制包和Lambda环境不兼容,而且容易出现虚拟环境关联全局包的问题。推荐用Docker模拟Lambda环境打包:
- 拉取Python 3.6的Lambda构建镜像:
docker pull lambci/lambda:build-python3.6 - 启动容器并挂载本地项目目录:
docker run -v "$(pwd)":/var/task lambci/lambda:build-python3.6 bash - 在容器内直接安装依赖到当前目录(无需虚拟环境也能避免全局包问题):
pip install numpy -t . - 退出容器后,将你的Lambda函数代码(比如
lambda_function.py)和根目录下的Numpy依赖一起打包成Zip,注意不要包含Docker容器里的无关文件。
2. 调整打包目录结构
Lambda要求依赖包直接放在Zip根目录,不能嵌套在子文件夹里。正确的Zip结构应该是:
lambda_function.py # 你的函数入口文件 numpy/ # Numpy的核心目录 numpy.libs/ # Numpy的依赖库目录
如果之前把依赖放在venv/lib/python3.6/site-packages/下,打包时要把这个目录里的内容移到Zip根目录,否则Lambda的Python解释器找不到依赖。
3. 避免虚拟环境关联全局包
你遇到的virtualenv试图删除全局包的问题,大概率是打包时错误包含了虚拟环境的配置文件,或者安装依赖时没有指定目标目录。解决方式:
- 安装依赖时一定要用
-t参数指定安装到当前项目目录,而不是虚拟环境的默认目录 - 打包前删除虚拟环境的
bin、include等目录,只保留site-packages下的依赖文件,再把这些文件移到Zip根目录 - 如果不需要虚拟环境,直接在Docker容器里用系统pip安装到目标目录更稳妥
4. 验证Lambda执行权限
虽然看起来是依赖问题,但偶尔权限不足也会导致加载失败。确保你的Lambda执行角色拥有:
- 从S3读取Zip包的权限(如果是通过S3部署)
- 基础的Lambda执行权限(
AWSLambdaBasicExecutionRole)
内容的提问来源于stack exchange,提问作者vsdaking
相关产品推荐
相关产品推荐

