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

本地与Docker环境中pytest报ModuleNotFoundError: No module named 'app'问题

问题分析与解决方案

核心原因

  1. 导入路径错误:测试代码和conftest.py中的导入未以app作为顶层包前缀,导致Python无法识别模块归属;同时app目录缺少__init__.py,无法被Python识别为合法包。
  2. 环境配置与运行路径不匹配:pytest运行时的Python路径未正确包含项目根目录,而Docker中应用能正常运行是因为启动命令(如uvicorn app.main:app)默认以项目根为工作目录,自然识别app包。

分步解决方案

1. 补全包标识文件

在project-root/app/目录下创建空的__init__.py文件,让Python将app目录识别为可导入的包:

touch project-root/app/__init__.py

2. 修正所有导入语句

修正conftest.py

将原有导入改为以app为前缀的绝对导入:

from app.config import config
from app.setup import create_app, db
import os
import pytest

@pytest.fixture(scope='session')
def app():
    os.environ['ENV'] = 'test'
    app = create_app(config.SCHEDULER_API_ENABLED)
    yield app

@pytest.fixture(scope='session')
def client(app):
    with app.test_client() as client:
        with app.app_context():
            db.create_all()
        yield client

修正test_import.py

同样改为带app前缀的绝对导入:

def test_import():
    from app.data.technology.enums import TechnologyTypeEnum
    assert True

3. 配置pytest运行环境

方式一:通过环境变量临时运行

在项目根目录(project-root/)下执行:

PYTHONPATH=$(pwd) pytest app/tests/

方式二:通过pyproject.toml持久化配置

在project-root/pyproject.toml中添加pytest配置(如果已有该文件,直接追加):

[tool.pytest.ini_options]
pythonpath = ["."]  # 将项目根目录加入Python路径
testpaths = ["app/tests"]  # 指定测试目录

之后在项目根目录直接运行pytest即可。

4. Docker环境下的测试运行

确保Docker容器的工作目录为project-root,并在容器内执行上述pytest命令。例如,Dockerfile中可添加:

WORKDIR /project-root
# 安装依赖后,运行测试
CMD ["pytest"]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 18:22:33