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
相关产品推荐
相关产品推荐

