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

解决通过文件路径导入模块引发的ModuleNotFoundError

解决ModuleNotFoundError: No module named 'lambda_context'的几种实用方案

方案1:给测试代码添加模块搜索路径

在test_my_lambda.py里,导入lambda_function之前,把lambda-1目录加到Python的模块搜索路径里,这样Python就能找到同目录下的lambda_context.py:

import sys
from pathlib import Path
import importlib.util

# 自动获取项目根目录,避免硬编码路径
project_root = Path(__file__).parent.parent.parent
lambda_1_dir = project_root / "lambdas" / "lambda-1"
sys.path.append(str(lambda_1_dir))

# 继续原本的导入逻辑
spec = importlib.util.spec_from_file_location("lambda_function", lambda_1_dir / "lambda_function.py")
module_name = importlib.util.module_from_spec(spec)
spec.loader.exec_module(module_name)

方案2:把lambda_function的导入改成相对导入

修改lambda_function.py里的导入语句,用相对路径引用同目录的模块:

from .lambda_context import SomeClass
from .lambda_context import function_xyz

然后在测试代码里,把lambdas目录加到sys.path,再以包的形式导入lambda_function:

import sys
from pathlib import Path

project_root = Path(__file__).parent.parent.parent
sys.path.append(str(project_root / "lambdas"))

# 从lambda-1包导入目标模块
from lambda_1 import lambda_function as module_name

方案3:换个目录运行pytest

别在tests目录下执行命令,直接回到项目根目录运行:

c:\path_to_project_root> python -m pytest tests/unit/test_my_lambda.py

这种情况下,配合方案2的相对导入,或者给lambda-1目录加个空的__init__.py(把它变成Python包),就能正常导入了。

方案4:将lambda-1转为Python包

在lambdas/lambda-1目录下创建一个空的__init__.py文件,让它成为可导入的包:

. Root
|--lambdas/
|   |-- lambda-1/
|       |-- __init__.py
|       |-- lambda_function.py
|       |-- lambda_context.py
|-- tests
    | -- unit
        |-- test_my_lambda.py

然后测试代码里可以直接从根目录导入:

import sys
from pathlib import Path

project_root = Path(__file__).parent.parent.parent
sys.path.append(str(project_root))

from lambdas.lambda_1 import lambda_function as module_name

这种方式最规范,适合长期维护的项目。

内容的提问来源于stack exchange,提问作者kal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 11:37:33