请求协助为Python 3.11运行时添加Pyodbc Lambda Layer
Python 3.11版本Pyodbc Lambda Layer部署问题解决
错误原因与修复方案
错误i:'lambda_function': No module named 'pyodbc'
问题出在Layer压缩包的目录结构不符合AWS Lambda要求。Lambda仅识别放在python/lib/python3.11/site-packages/路径下的Python包。
修复步骤:
- 下载适配Python3.11且对应Lambda架构(x86_64/arm64)的pyodbc .whl文件
- 创建层级目录:
python/lib/python3.11/site-packages/ - 将whl文件解压到上述目录中
- 将整个
python目录打包为zip(注意不要把python目录嵌套在其他文件夹里) - 上传该zip包作为Lambda Layer
错误ii:“无法导入模块'app':找不到共享对象文件libodbc.so.2”
Lambda运行环境默认未预装ODBC驱动依赖,需手动将系统库打包进Layer。
修复步骤:
- 从Amazon Linux 2(Python3.11 Lambda基于此环境)中提取
libodbc.so.2及其依赖库(可通过ldd /usr/lib64/libodbc.so.2查看所有依赖) - 在Layer压缩包中创建
lib/目录,将所有提取的.so文件放入其中 - 将
python/和lib/目录一起打包为zip后上传 - Lambda运行时会自动加载
lib/目录下的系统库
快速构建合规Layer的方法
用Docker模拟Lambda环境构建,避免本地环境差异:
- 拉取Lambda Python3.11镜像:
docker pull public.ecr.aws/lambda/python:3.11 - 启动并进入容器:
docker run -it --rm public.ecr.aws/lambda/python:3.11 bash - 在容器内安装pyodbc到指定目录:
pip install pyodbc -t /tmp/python/lib/python3.11/site-packages/ - 复制系统ODBC库:
cp /usr/lib64/libodbc.so.2 /tmp/lib/,同时复制所有依赖库 - 退出容器,打包目录:
cd /tmp && zip -r pyodbc-layer.zip python lib - 上传该zip包到Lambda Layer
内容的提问来源于stack exchange,提问作者Deepak Bhardwaj
相关产品推荐
相关产品推荐

