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

为何添加tests目录的__init__.py可解决Pytest Discovery Error问题?

Pytest模块导入与VS Code调试问题

项目目录结构

├── modules
|   ├── __init__.py
│   ├── data
|   |   ├── __init__.py
|   |   └── tables.py
├── tests
│   └── test_tabels.py
└── main.py

问题描述

运行pytest时触发Pytest Discovery Error,错误信息为ModuleNotFoundError: No module named modules。测试文件test_tabels.py中使用from modules.data import GetData导入待测试代码:

  • 给tests目录添加__init__.py后,错误消失,但不清楚原理
  • 其他仓库没有tests/__init__.py也无此问题
  • CLI中能正常运行测试,但VS Code的调试器和测试面板仍报同样错误

原理解释

1. __init__.py的作用

__init__.py是Python识别目录为可导入包的标志。当你在tests/test_tabels.py中导入modules时,Python会从当前脚本的执行上下文查找模块:

  • 没有tests/__init__.py时,VS Code的pytest发现机制可能直接在tests目录下执行测试脚本,此时项目根目录(modules所在目录)不在Python的模块搜索路径(sys.path)中,导致找不到modules
  • 添加tests/__init__.py后,tests被识别为一个包,Python会自动将项目根目录加入sys.path,从而可以正常找到modules模块

2. 为什么其他仓库没问题?

其他仓库可能存在以下情况:

  • 已通过pytest.ini、pyproject.toml等配置文件指定项目根目录,pytest会自动将根目录加入sys.path
  • 测试脚本使用了相对导入(但相对导入在独立运行脚本时易出问题)
  • 系统环境变量PYTHONPATH已包含项目根目录

VS Code调试/测试面板问题解决

VS Code的pytest插件默认运行上下文与CLI不同,需手动配置让它识别项目根目录:

  • 在项目根目录创建.vscode/settings.json,添加以下配置:
    {
        "python.testing.pytestArgs": ["."],
        "python.testing.unittestEnabled": false,
        "python.testing.pytestEnabled": true,
        "python.analysis.extraPaths": ["${workspaceFolder}"]
    }
    
  • 配置完成后重启VS Code,测试面板和调试器即可正确识别modules模块

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 18:42:09