如何解决conftest.py导入外部函数/夹具的ModuleNotFoundError?
解决pytest导入时的ModuleNotFoundError问题
1. 规范测试目录结构
先确保你的测试目录符合Python模块规范,必须给tests目录添加空的__init__.py文件,让Python将其识别为可导入模块。示例结构:
项目根目录/ ├── src/ │ └── ...(业务代码文件) └── tests/ ├── __init__.py ├── conftest.py └── test_function.py
2. 调整导入语法
使用相对导入
在conftest.py中用相对路径导入test_function.py的内容,注意开头的.表示当前目录:
from .test_function import test_username_db, 目标fixture名
绝对导入(需配置Python路径)
如果偏好绝对导入(比如from tests.test_function import ...),需要把项目根目录加入Python搜索路径:
- 方法一:运行pytest时临时设置路径
在终端执行:PYTHONPATH=/你的项目根目录绝对路径 pytest - 方法二:在
conftest.py开头添加代码自动配置import sys from pathlib import Path # 将项目根目录加入Python路径 sys.path.append(str(Path(__file__).parent.parent))
3. 排查循环导入问题
检查是否出现conftest.py导入test_function.py内容,同时test_function.py又导入conftest.py中fixture的情况。如果存在循环导入,把共享的工具代码或通用fixture移到单独文件(比如tests/utils.py),两边都从这个文件导入。
4. 确认pytest运行路径
必须在项目根目录下执行pytest命令,不要进入tests目录再运行:
# 正确操作 cd 项目根目录 pytest tests/ # 错误操作(会导致路径识别异常) cd tests pytest
5. 调试路径问题
如果以上方法无效,可在conftest.py开头添加调试代码,确认Python路径是否正确:
import sys from pathlib import Path print("当前Python搜索路径:", sys.path) print("conftest.py所在目录:", Path(__file__).parent)
运行pytest后查看输出,确认项目根目录或tests目录是否在搜索路径中。
内容的提问来源于stack exchange,提问作者trewbth
相关产品推荐
相关产品推荐

