命令行python -m pytest可运行,VS Code测试标签报ModuleNotFoundError
命令行pytest正常但VS Code测试标签报错的原因与解决方法
问题本质
当你在my_project目录下执行python -m pytest时,Python会自动将**当前工作目录(即my_project)**添加到sys.path(Python的模块搜索路径),因此src作为顶层包能被测试文件正常导入。但VS Code的pytest测试适配器默认执行环境没有将my_project目录加入sys.path,或者启动路径不是my_project,导致测试代码找不到src模块。
可行解决方案
方案1:配置VS Code的pytest工作目录
修改.vscode/settings.json,强制pytest从my_project目录启动,和命令行环境保持一致:
{ "python.testing.pytestArgs": ["test"], "python.testing.unittestEnabled": false, "python.testing.pytestEnabled": true, "python.testing.cwd": "${workspaceFolder}" }
${workspaceFolder}指代你在VS Code中打开的my_project目录,设置后测试适配器会以该目录为工作路径运行pytest。
方案2:手动添加路径到测试文件(临时方案)
在每个测试文件的开头添加代码,将my_project目录加入Python的搜索路径:
import sys from pathlib import Path # 向上回溯三级目录,找到my_project的绝对路径 sys.path.append(str(Path(__file__).resolve().parent.parent.parent)) from src.models.myModel import myModel
这种方式无需修改配置,但代码侵入性强,仅适合临时调试。
方案3:将src安装为可编辑包(推荐长期方案)
在my_project目录下创建pyproject.toml文件,定义项目的包结构:
[build-system] requires = ["setuptools>=61.0"] build-backend = "setuptools.build_meta" [project] name = "my_project" version = "0.1.0" packages = ["src"]
然后在my_project目录下执行以下命令,将包安装为可编辑模式:
pip install -e .
这样src会被Python识别为全局可导入的包,无论从哪个路径运行测试都能正常导入。
内容的提问来源于stack exchange,提问作者Marc Miller
相关产品推荐
相关产品推荐

