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模块。
修复方案
你可以任选以下任意一种方案解决问题:
方案一:修改代码适配路径规则
- 先修改
foo.py的导入语句,改为显式相对导入或者绝对导入:
# 显式相对导入(适合包内引用场景) from . import bar def start(): bar.do_stuff()
如果用绝对导入写法如下:
# 绝对导入写法 from src import bar def start(): bar.do_stuff()
- 再修改
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
相关产品推荐
相关产品推荐

