遵循pytest官方指南时跨文件夹导入模块失败求助
问题根源
- 项目采用src布局,但运行pytest时Python的模块搜索路径(
sys.path)未包含src目录,导致无法找到example_package_VCMota包。 - 相对导入语法(
from ..src.example import add_one)仅适用于包内部的模块引用,而tests目录未被Python识别为包的一部分,因此无法通过相对路径定位到src下的模块。
解决方案(针对第一个项目)
方法1:开发模式安装包(推荐)
在项目根目录执行以下命令,将包以开发模式安装到当前环境,Python会自动识别包路径:
pip install -e .
修改tests/test_example.py的导入语句为:
from example_package_VCMota.example import add_one
之后直接运行pytest即可正常执行测试。
方法2:配置pytest的Python路径
在项目根目录的pyproject.toml中添加以下配置,让pytest自动将src目录加入模块搜索路径:
[tool.pytest.ini_options] pythonpath = ["src"]
修改tests/test_example.py的导入语句为:
from example_package_VCMota.example import add_one
运行pytest即可生效。
简化结构的导入问题解决
直接运行python test_example.py报错,是因为脚本运行时Python无法识别tests的父目录为项目根目录,相对导入失效。可通过以下两种方式解决:
方法1:手动添加路径到sys.path
在tests/test_example.py开头添加代码,将项目根目录加入模块搜索路径:
import sys from pathlib import Path # 获取项目根目录(tests的父目录)并加入sys.path sys.path.append(str(Path(__file__).parent.parent)) from src.example import add_one
之后无论是运行python test_example.py还是pytest都能正常导入。
方法2:通过pytest运行并设置路径
在项目根目录运行pytest时,通过参数临时添加src到路径:
pytest --pythonpath=src
测试文件中使用绝对导入:
from src.example import add_one
内容的提问来源于stack exchange,提问作者boblacerda
相关产品推荐
相关产品推荐

