运行 测试时导入特定目录树时出错

Errors with imports with specific directory tree when running test

我为我所在的项目创建了一些测试,从模块导入模块进行测试时似乎出现了一些问题。我已将我的项目简化为以下工作树:

├── project_name
    ├── data
        ├── modules
        |     ├── __init__.py
        |     ├── module_A.py
        |     ├── module_B.py
        ├── test
              ├── __init__.py
              ├── test_module_A.py

里面modules/__init__.py

from . import module_A
from . import module_B

里面module_A.py

from module_B import function_b

def function_a():
    pass

里面module_B.py

def function_b():
    pass

里面test/__init__.py

from . import test_module_A

里面test_module_A.py

from unittest import TestCase
from modules.module_A import function_a

class TestModuleA(TestCase):

    def test_function_a(self):
        pass

问题: 当我转到 project-name/data/test 文件夹和 运行 nosetests 时,我收到以下错误行:

File "project_name/data/test/__init__.py", line 1, in <module>
 ​from . import test_module_A

File "project_name/testing/data/test/test_module_A.py", line 2, in <module>
   ​from modules.module_A import function_a

File "project_name/data/modules/__init__.py", line 1, in <module>
   ​from . import module_A

File "project_name/data/modules/module_A.py", line 2, in <module>
   ​from module_B import function_b

ModuleNotFoundError: No module named 'module_B'

似乎 module_A 无法导入 module_B 当第一次从测试中调用时。我做错了什么?

文件 modules/module_A.py 包含一个 绝对导入 (from module_B import function_b) 对比 相对导入 modules/__init__.py (from . import module_B).

要在当前包中导入文件,您需要使用相对导入

modules/module_A.py 中导入 function_b 的正确 相对导入 应该是

from .module_B import function_b