如何在AWS Lambda中导入git子模块内的Python代码?
解决方案
报错原因
- 导入语句存在语法错误,末尾多余的
.导致路径识别异常 - AWS Lambda控制台在线编辑仅支持单文件代码编写,你本地项目中的git子模块
modelling文件夹并未同步到Lambda执行环境中 - 子模块文件夹缺少Python包标识文件
__init__.py,无法被识别为可导入的模块包
具体操作步骤
方案1:打包部署(推荐,适合正式环境)
- 先在本地项目根目录执行命令拉取完整子模块内容:
git submodule update --init --recursive - 在和
app.py同级的modelling子模块根文件夹下,新建空的__init__.py文件,让Python可以将该文件夹识别为可导入的包 - 修正导入语句,删除末尾多余的点:
from modelling.modelling import mod_func - 选中项目根目录下的
app.py和整个modelling文件夹,直接打包为zip压缩包(注意不要选中外层的项目根文件夹打包,否则Lambda会找不到入口文件) - 打开Lambda控制台,进入对应函数的「代码」标签页,选择「上传自」→「.zip文件」,上传刚才打包的压缩包即可
方案2:控制台在线编辑适配(仅适合临时测试)
- 在Lambda控制台的代码编辑器中,右键点击文件列表区域,选择「新建文件夹」,命名为
modelling - 进入
modelling文件夹,新建两个文件:空的__init__.py,以及modelling.py,将你本地子模块中modelling.py的代码全部复制粘贴到该文件中 - 回到
app.py,修正导入语句为from modelling.modelling import mod_func,点击部署即可
CI/CD部署补充说明
如果是通过CI/CD流水线自动部署Lambda,需要在流水线的代码拉取步骤中配置子模块拉取参数,否则流水线默认不会拉取git子模块的内容,同样会触发导入报错。
内容的提问来源于stack exchange,提问作者Danish Xavier
相关产品推荐
相关产品推荐

