关于单元测试:Python unittest无法解析import语句

Python unittest failing to resolve import statements

我的文件结构如下

1
2
3
4
5
6
7
8
project
    src
        __init__.py
        main.py
        module.py
        secondary.py
    test
        test_module.py

模块化

1
2
import secondary
x = False

第二

1
pass

测试模块

1
2
3
4
5
6
7
from unittest import TestCase

from src import module

 class ModuleTest(TestCase):
    def test_module(self):
        self.assertTrue(module.x)

/project/中调用python3 -m unittest discover会产生错误:

1
2
3
4
5
 File"/Users/Me/Code/project/test/test_module.py", line 6, in <module>
  from src import module
 File"/Users/Me/Code/project/src/module.py", line 1, in <module>
  import secondary
ImportError: No module named 'secondary'

我该怎么做才能保证进口secondary.py没有错误?


在python 3(和带有from __future__ import absolute_import的python 2)中,当从同一个包中导入另一个模块时,必须明确您想要什么模块。您在module.py中使用的语法(import secondary仅在secondary是python模块搜索路径中文件夹中的顶级模块时有效。

要从您自己的包中明确请求相对导入,请使用from . import secondary。或者,使用包和模块的名称(from src import secondaryimport src.secondary进行绝对导入,并在其他地方使用src.secondary模块,而不仅仅是secondary