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

如何从包源码目录外的相邻测试模块中导入内容?

分离式测试目录下模块间导入问题的解决方法

这种分离式目录结构并非固有缺陷,问题出在Python的模块导入机制上——默认情况下tests目录不在Python的模块搜索路径(sys.path)中,也不会被识别为可导入的包,导致相对导入和普通绝对导入都无法生效。以下是几种可行的解决方式:

1. 手动将tests目录加入Python路径

方式一:运行测试时设置环境变量

在项目根目录下执行测试时,通过PYTHONPATH指定tests目录的路径:

PYTHONPATH=./tests pytest

之后在test_app.py中就可以使用绝对导入:

from test_view import important_attr

方式二:在测试文件中动态添加路径

在test_app.py的最顶部添加代码,将当前测试文件所在的tests目录加入sys.path:

import sys
from pathlib import Path
# 将tests目录添加到模块搜索路径
sys.path.append(str(Path(__file__).parent))

from test_view import important_attr

2. 将tests目录作为包进行导入

在tests目录下保留__init__.py,然后在项目根目录下执行测试时,将项目根目录加入PYTHONPATH:

PYTHONPATH=. pytest

此时可以使用完整的绝对导入路径:

from tests.test_view import important_attr

3. 使用pytest的conftest.py共享测试资源

如果important_attr是测试用的共享变量/工具,更推荐将其放到tests目录下的conftest.py文件中。pytest会自动识别这个文件中的内容,所有测试模块无需手动导入即可直接使用:

# tests/conftest.py
important_attr = "你的共享内容"

之后test_app.py和test_view.py可以直接使用important_attr。

补充说明

之前尝试相对导入失败,是因为直接运行测试文件或pytest时,测试模块是作为独立脚本执行的,而非作为包的一部分运行(只有用python -m tests.test_app这种方式运行时,相对导入才会生效)。而普通绝对导入失效,则是因为tests目录不在Python的默认搜索路径里。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 16:52:12