You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 20:00:00