将Python函数导入Serverless,AWS Lambda模块导入报错求助
解决AWS Lambda导入模块错误:No module named 'monitoring'
问题描述
将Serverless项目部署到AWS后,测试Lambda函数时出现导入错误,报错信息如下:
{ "errorMessage": "Unable to import module 'src/app_monitor': No module named 'monitoring'", "errorType": "Runtime.ImportModuleError", "requestId": "bca3f67d-815f-452b-a2a6-c713ad2c6baa", "stackTrace": [] }
解决方案
1. 对齐目录结构与导入语句
先确认monitoring模块的位置,调整代码中的导入方式:
- 若
monitoring是src目录的子模块,在app_monitor.py中使用相对导入:from .monitoring import [目标模块/方法] - 若
monitoring是项目根目录下的独立目录,需确保该目录被打包进Lambda部署包,同时代码中使用正确的绝对导入路径。
2. 配置Serverless打包规则
在serverless.yml中通过package字段指定要包含的文件/目录,确保monitoring模块被纳入部署包:
service: your-service-name package: include: - src/** # 包含src目录下所有内容 - monitoring/** # 包含monitoring模块目录 # 可选:排除无关文件以减小包体积 exclude: - node_modules/** - .git/** - tests/**
3. 用插件处理依赖打包
如果monitoring是第三方依赖或需要编译的本地模块,使用serverless-python-requirements插件自动处理打包流程:
- 安装插件:
npm install serverless-python-requirements --save-dev
- 在
serverless.yml中配置插件:
plugins: - serverless-python-requirements custom: pythonRequirements: dockerizePip: non-linux # 针对非Linux环境编译依赖(如MacOS/Windows)
4. 临时调整Python运行路径
作为应急方案,可在app_monitor.py开头添加路径配置,让Python能找到monitoring模块:
import sys sys.path.append('.') # 或根据模块实际位置调整,比如sys.path.append('/opt/python')
内容的提问来源于stack exchange,提问作者Dimmy Sarris
相关产品推荐
相关产品推荐

