VS Code使用AWS SAM本地调用Python Lambda出现six.moves.winreg导入错误
问题根因
该报错核心为平台依赖兼容问题:winreg是仅Windows系统存在的内置模块,你打包的Lambda层依赖中python-dateutil库是在Windows本地环境安装的,带有Windows专属的代码逻辑,放到SAM模拟的Linux架构Lambda运行容器中执行时,触发导入失败。
上周五可正常运行、周一更新后报错,是因为你更新依赖、或调整层配置时,误将Windows本地生成的依赖包打到了Lambda层中。
修复步骤
- 第一步:清理所有本地缓存
删除三个Lambda层对应目录下的__pycache__、.pyc等Windows生成的缓存文件,以及存放依赖的site-packages目录,彻底清除已安装的Windows版本依赖。 - 第二步:使用容器环境重新打包依赖
不要在Windows本地直接pip安装依赖到层目录,使用SAM官方的容器构建方式打包,执行命令:
该命令会自动拉取对应Python版本的Lambda官方容器,在Linux环境下安装所有依赖,避免平台兼容问题。sam build --use-container - 第三步:临时验证方案
要快速确认是否为层依赖问题,可以先注释掉template.yaml中Services2配置的Layers字段,在Lambda代码目录本地执行pip install boto3 aws-lambda-powertools后重新调用,确认报错是否消失。 - 第四步:补充配置检查
你当前launch.json中的containerBuild参数已正确设为true,可额外添加构建参数强制容器构建:"sam": { "containerBuild": true, "buildArguments": "--use-container" }
内容的提问来源于stack exchange,提问作者Andrea Rosati
相关产品推荐
相关产品推荐

