fastapi: 测试:执行pytest时报错:ModuleNotFoundError: No module named 'app'

一,报错信息:

$ pytest
ImportError while loading conftest '/data/python/fastapi/demo1/tests/conftest.py'.
tests/conftest.py:6: in <module>
    from app.core.database import Base, get_db
E   ModuleNotFoundError: No module named 'app'

二,问题原因

Python 的模块检索路径(sys.path)中找不到当前项目根目录的路径。
当运行 pytest 时,它默认只把当前所在的目录或 tests/ 目录加到路径里,而不知道去哪里找业务代码目录(比如 app)。

三,解决:

在根目录创建 pyproject.toml
这是现代 Python 项目最规范的做法。通过配置文件,明确告诉 pytest 你的源代码根目录在哪里。

在项目的根目录(也就是包含 tests/ 和 app/ 的那层目录)下,创建一个名为 pyproject.toml 的文件(如果已存在则直接添加):

[tool.pytest.ini_options]
pythonpath = ["."]

 

原理:pythonpath = ["."] 会强制要求 pytest 在启动时,把当前配置文件所在的“根目录”加入到 Python 的环境变量 sys.path 中。
这样 from app... 就能被完美识别了。

posted @ 2026-07-27 22:39  刘宏缔的架构森林  阅读(6)  评论(0)    收藏  举报