我的文件结构如下所示
project
src
__init__.py
main.py
module.py
secondary.py
test
test_module.py
import secondary
x = False
pass
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
而不会出错?
答案 0 :(得分:5)
在Python 3(以及带有from __future__ import absolute_import
的Python 2)中,您必须明确从同一个包导入另一个模块时所需的模块。您在module.py
(import secondary
)中使用的语法仅在secondary
是Python模块搜索路径中的文件夹中的顶级模块时才有效。
要从您自己的包中明确请求相对导入,请改用from . import secondary
。或者,使用包的名称以及模块(from src import secondary
或import src.secondary
进行绝对导入,并在模块的其他位置使用src.secondary
而不是secondary
)