AWS Lambda导入不同目录Python函数失败问题求助
在AWS Lambda Python函数中从不同目录导入函数的解决方案
你遇到的问题是因为Serverless框架默认未将src目录包含到Lambda部署包中,或者Python运行时无法识别该目录的模块路径。以下是几种可行的解决方法:
方法1:修改Serverless配置,确保src目录被打包
在serverless.yml的functions.ask节点下添加package.include配置,明确指定要包含src目录下的所有文件:
service: rag-se-aws-lambda frameworkVersion: '3' provider: name: aws runtime: python3.11 package: individually: true functions: ask: handler: handler.ask package: include: - src/** # 包含src目录下所有文件及子目录 events: - httpApi: path: / method: post
部署时src目录会被同步打包到Lambda函数中,此时Python就能通过from src.my_function import my_function正常导入模块。
方法2:手动将src目录添加到Python路径
在handler.py开头,把src目录路径添加到sys.path中,让Python能识别该目录下的模块:
import json import sys import os # 将当前文件所在目录下的src路径加入系统路径 sys.path.append(os.path.join(os.path.dirname(__file__), 'src')) from my_function import my_function def ask(event, context): my_function() body = { "message": f"Go Serverless v3.0! Your function executed successfully! Length ", "input": event, } response = {"statusCode": 200, "body": json.dumps(body)} return response
这种方法无需修改Serverless核心配置,但建议配合方法1的打包配置,确保src目录被正常打包。
方法3:将src转为Python包
在src目录下创建一个空的__init__.py文件,让Python将src识别为合法的包:
项目结构: ├── handler.py ├── serverless.yml └── src/ ├── __init__.py └── my_function.py
同时确保Serverless配置包含src目录(同方法1),这样就能保持原导入语句from src.my_function import my_function正常工作。
错误原因说明
Lambda运行时的工作目录是部署包的根目录,当使用package.individually: true时,Serverless默认只会打包handler文件及关联依赖,不会自动包含src这类自定义目录。如果目录未被打包,或者路径不在Python的sys.path中,就会触发No module named 'my_function'的错误。
内容的提问来源于stack exchange,提问作者Picci
相关产品推荐
相关产品推荐

