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

pytest加载含__init__.py测试模块失败及特定测试运行报错求助

解决pytest导入错误并运行特定测试的方案

首先,你遇到的ModuleNotFoundError是因为测试文件里的import __init__写法不对——Python会把它当成寻找全局的__init__模块,而不是test包自己的初始化文件。下面给你几个可行的解决思路,同时覆盖如何运行特定测试:

一、修正导入逻辑,避免手动导入__init__

你的核心需求是让测试能找到src目录下的模块,其实不需要在测试文件里手动导入__init__,可以用更规范的方式处理路径:

方案1:用pytest的--pythonpath参数指定路径

直接在运行pytest时把src目录加入Python的搜索路径,这样测试文件里就能直接导入src下的模块(比如import app或from server import xxx)。

运行单个测试文件的命令:

pytest test/test_app.py --pythonpath=src

如果要运行文件里的某个特定测试函数:

pytest test/test_app.py::test_my_function --pythonpath=src

如果是测试类里的某个方法:

pytest test/test_app.py::TestAppClass::test_specific_method --pythonpath=src

方案2:设置PYTHONPATH环境变量

在运行pytest前,把项目根目录或者src目录加到环境变量里,让Python自动识别模块:

Linux/macOS:

export PYTHONPATH=$PYTHONPATH:/home/connesy/code/src
pytest test/test_app.py

Windows:

set PYTHONPATH=%PYTHONPATH%;C:\your\path\to\src
pytest test/test_app.py

设置后同样可以用::语法指定特定测试函数/方法。

方案3:调整测试文件的导入语句

如果想保留test包的__init__.py自动添加src到sys.path的逻辑,那需要修改测试文件里的导入方式:

把测试文件里的import __init__改成相对导入:

from . import __init__

然后必须在项目根目录(也就是src和test所在的目录)下运行pytest,这样test会被识别为一个Python包,它的__init__.py会自动执行,把src加到路径里。

运行特定测试的命令示例:

# 项目根目录下执行
pytest test/test_app.py::test_my_function

二、额外提示

  • 尽量避免手动修改sys.path,用pytest自带的参数或环境变量管理路径更规范;
  • 如果你的src目录也是一个Python包(有__init__.py),测试文件里可以用绝对导入,比如from src.app import xxx,然后直接在项目根目录运行pytest即可,不需要额外设置路径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:01:35