我有一个类似于以下内容的文件结构

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导入而不会出现错误?

最佳答案

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

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

关于python - Python unittest无法解析导入语句,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34986900/

10-15 12:55