运行pytest时提示找不到core模块,该如何解决?
问题原因及解决方案
核心原因
你遇到的ModuleNotFoundError是因为模块导入路径错误:
app/main.py中使用from core.config import settings是尝试从Python全局模块路径查找core,但core是app包下的子模块,并非全局模块,所以找不到。- 当pytest加载
app.main时,Python会按照sys.path中的路径查找模块,而core不在全局路径里,仅属于app包的内部模块。
解决方法
方法1:使用相对导入(推荐)
修改app/main.py中的导入语句,改为相对当前包的导入:
# 原代码 from core.config import settings # 修改后 from .core.config import settings
这种方式明确指向当前app包下的core子模块,符合Python包的导入规范。
方法2:使用带包前缀的绝对导入
如果偏好绝对导入风格,修改导入语句为基于app包的完整路径:
# 原代码 from core.config import settings # 修改后 from app.core.config import settings
这样不管从哪个位置导入app.main,都能通过全局路径定位到core模块(默认运行pytest时项目根目录会被加入Python的sys.path)。
方法3:手动添加项目根目录到sys.path(临时应急用,不推荐长期使用)
如果不想修改代码,可以在tests/conftest.py开头添加代码,将项目根目录加入Python的模块查找路径:
import sys from pathlib import Path # 获取项目根目录(tests目录的父目录) project_root = Path(__file__).parent.parent sys.path.append(str(project_root))
验证修改
修改完成后,重新运行pytest:
pytest tests/
此时应该能正常加载core模块,测试用例可以正常执行。
内容的提问来源于stack exchange,提问作者Daricyos
相关产品推荐
相关产品推荐

