我有一个结构如下的代码库:
package/
module1/
submoduleA/
__init__.py
submoduleA.py
submoduleA_tests.py
submoduleB/
__init__.py
submoduleB.py
submoduleB_tests.py
...
utils/
testing_utils.py
两个__init__
文件包含
from submodule<A,B> import *
在module1.py
中,我有一行
from submoduleB import foo
在submoduleA_tests.py
内,我从submoduleA.py
导入函数,并从utils.testing_utils.py
检索常规测试代码。为了从submoduleA目录访问utils
目录,submoduleA_tests.py
包含了以下内容:
from submoduleA import spam, ham
import sys
sys.path.insert(0, '../..')
from utils.testing_utils import bar, baz
比看起来更糟,甚至更糟糕,此代码甚至不起作用!实际上,如果我尝试从module1_tests.py
内部运行submoduleA
,则会收到:
~/package/module1/submoduleA/submoduleA.py in <module>
----> 1 from submoduleB import foo
ModuleNotFoundError: No module named 'submoduleB'
这不是我想要过的生活!
问题:用这样的相互依赖的子模块组织程序包的正确方法是什么,以便我可以最小化导入问题并允许其他人以健壮+简化的方式运行单元测试? / p>