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

如何让pytest正确识别待测试代码文件 解决ModuleNotFoundError报错

解决pytest无法识别待测试模块的方案

报错核心原因有两点:

  1. 运行pytest时,源码所在目录没有被加入Python的模块搜索路径
  2. 导入语句硬编码了外层目录名,docker环境目录名变更后无法匹配

对应解决方案如下:

方案1:使用conftest.py动态配置搜索路径(适配多环境最优解)

该方案不需要修改项目全局配置,也不依赖外层目录命名,本地和docker环境可以通用。

  • 在tests目录下新建名为conftest.py的文件,pytest运行时会自动加载该文件
  • 写入以下代码,自动将server.py所在的根目录加入Python搜索路径:
import sys
from pathlib import Path
# 自动获取tests目录的上级目录(即server.py所在目录),加入搜索路径
sys.path.append(str(Path(__file__).parent.parent.resolve()))
  • 修改测试文件的导入语句,去掉硬编码的外层目录名:
from server import app

方案2:通过pytest配置文件指定搜索路径

如果不想新增conftest.py,也可以用pytest的内置配置实现:

  • 在server.py所在的根目录(本地为my_server,docker为imported_files)新建pytest.ini配置文件
  • 写入以下内容:
[pytest]
pythonpath = .
  • 同样修改测试文件导入语句为from server import app即可。

方案3:可编辑安装(适合正式维护/发布项目)

如果你的项目需要长期维护或对外发布,可以通过包配置实现全局模块识别:

  • 在项目根目录新增pyproject.toml配置文件,示例配置如下:
[build-system]
requires = ["setuptools>=61.0"]
build-backend = "setuptools.build_meta"

[project]
name = "my-server"
version = "0.1.0"
packages = ["."]
  • 运行pip install -e .执行可编辑安装,之后不管在任何目录运行pytest都可以正确识别模块,导入语句同样使用from server import app即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 19:06:03