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

AWS SAM项目运行pytest报ModuleNotFoundError找不到config模块如何解决

问题根因

AWS SAM本地运行时会自动将layers目录添加到Python的模块搜索路径(sys.path)中,所以from config.settings import xxx这类导入可以正常识别;但本地执行pytest时,默认只会将当前执行命令的目录(你提到的项目根目录)加入搜索路径,layers下的config、utils模块没有被纳入搜索范围,所以触发ModuleNotFoundError。

可用解决方案

方案1:无代码侵入配置(推荐)

无需修改任何业务代码,仅调整pytest运行配置即可:

  1. 在项目根目录创建pytest.ini配置文件,写入以下内容:
[pytest]
pythonpath = account/layers
  1. 配置完成后直接执行原测试命令即可正常运行:
python3 -m pytest tests/unit/

如果不想加配置文件,也可以单次执行测试时临时指定路径,Mac/Linux下命令如下:

PYTHONPATH=./account/layers python3 -m pytest tests/unit/

方案2:统一全路径导入(适配所有运行场景)

如果要兼顾本地测试、SAM部署、云端运行的兼容性,可以统一调整导入规则:

  1. 修改layers/utils/logger.py的导入语句:
    将from config.settings import ApplicationConfig调整为from layers.config.settings import ApplicationConfig
  2. 修改get_accounts/app.py的导入语句:
    将原有导入
from config.settings import ApplicationConfig
from utils.logger import get_logger

调整为

from layers.config.settings import ApplicationConfig
from layers.utils.logger import get_logger
  1. 在项目根目录创建空的conftest.py文件,pytest会自动将该文件所在目录加入模块搜索路径,直接运行测试命令即可。
之前尝试方案无效的原因
  • 给目录加__init__.py仅能将目录标记为Python包,无法解决模块搜索路径缺失的问题,所以无效
  • 编写setup.py时仅指定config为包名,没有将layers下所有子模块都纳入可导入范围,且安装后没有对应调整导入路径,所以不生效
  • 仅修改了get_accounts/app.py的导入加layers前缀,没有同步修改layers/utils/logger.py内部的导入语句,所以logger模块还是找不到config包
  • 删除test目录下的__init__.py和本次导入错误没有关联,所以无法解决问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 14:45:02