Python unittest无法解析import语句

时间:2016-01-25 07:08:43

标签: python unit-testing python-3.x python-unittest

我的文件结构如下所示

project
    src
        __init__.py
        main.py
        module.py
        secondary.py
    test
        test_module.py        

module.py

import secondary
x = False

secondary.py

pass

test_module.py

from unittest import TestCase

from src import module

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

python3 -m unittest discover中调用/project/会出错:

 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而不会出错?

1 个答案:

答案 0 :(得分:5)

在Python 3(以及带有from __future__ import absolute_import的Python 2)中,您必须明确从同一个包导入另一个模块时所需的模块。您在module.pyimport secondary)中使用的语法仅在secondary是Python模块搜索路径中的文件夹中的顶级模块时才有效。

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