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

Python测试模块导入兼容问题:适配两种运行方式的正确方法

解决Python测试文件导入兼容问题

针对你的目录结构,要让test_module.py既能通过python tests/test_module.py直接运行,又能支持pytest命令,可采用以下几种实用方案:

方法一:修改模块搜索路径(最直接)

在test_module.py的开头添加代码,将项目根目录手动加入Python的模块搜索路径:

import sys
from pathlib import Path

# 获取当前文件的父目录的父目录(即项目根目录)
sys.path.insert(0, str(Path(__file__).resolve().parent.parent))

from tests.utils import myfunction

原理:不管是直接运行脚本还是执行pytest,根目录都会被加入搜索路径,tests作为顶层包可被直接识别,绝对导入就能正常生效。

方法二:用模块模式运行脚本(无需修改代码)

保持test_module.py里的相对导入:

from .utils import myfunction

执行脚本时改用Python的模块运行方式:

python -m tests.test_module

原理:-m参数会自动把项目根目录加入搜索路径,tests会被当作包处理,相对导入自然生效;而pytest本身就会把测试文件视为包的一部分,所以也能正常运行。

方法三:配置pytest+绝对导入(适合大型项目)

  1. 在项目根目录创建pytest.ini配置文件:
[pytest]
pythonpath = .

该配置会让pytest自动把根目录加入模块搜索路径。
2. 在test_module.py中使用绝对导入:

from tests.utils import myfunction

此时执行pytest可直接运行;若要直接运行脚本,可通过环境变量指定路径:

PYTHONPATH=. python tests/test_module.py

各方案优缺点

  • 方法一:无需改变运行命令,代码内直接处理路径,适合小型项目快速解决问题。
  • 方法二:无需修改代码,但需调整脚本运行方式,更符合Python模块规范。
  • 方法三:适合大型项目,统一测试配置,可配合启动脚本或环境变量进一步简化操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 22:47:12