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

Python unittest项目test/目录引用src/模块时找不到bar模块问题

Python测试导入bar模块报错修复

问题根源

  • 你在test_foo.py中使用相对路径../src添加模块搜索路径,VSCode运行单元测试的默认工作目录为项目根目录proj/,而非test/文件夹,相对路径会被解析为不存在的proj/../src,src目录实际没有被加入搜索路径。
  • foo.py中的import bar属于Python2风格的包内隐式相对导入,Python3默认不支持该写法,当foo作为src包的模块被导入时,Python不会主动在src目录下搜索bar模块。

修复方案

你可以任选以下任意一种方案解决问题:

方案一:修改代码适配路径规则

  1. 先修改foo.py的导入语句,改为显式相对导入或者绝对导入:
# 显式相对导入(适合包内引用场景)
from . import bar

def start():
  bar.do_stuff()

如果用绝对导入写法如下:

# 绝对导入写法
from src import bar

def start():
  bar.do_stuff()
  1. 再修改test_foo.py的路径添加逻辑,用绝对路径避免工作目录影响:
import unittest
import sys
import os

# 动态获取项目根目录添加到搜索路径,不受运行时工作目录影响
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

from src import foo

class TestFoo(unittest.TestCase):
  def test_foo(self):
    foo.start()

if __name__ == '__main__':
    unittest.main()

方案二:修改VSCode配置避免改动业务代码

不想修改业务代码的话,可以在项目根目录新建.env文件,添加以下内容,让VSCode运行测试时自动把src目录加入模块搜索路径:

PYTHONPATH=./src

之后只需要把foo.py的导入改为绝对导入from src import bar即可正常运行测试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 07:57:02