运行 测试时导入特定目录树时出错
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
我为我所在的项目创建了一些测试,从模块导入模块进行测试时似乎出现了一些问题。我已将我的项目简化为以下工作树:
├── 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