我一直在尝试各种层次结构的使用,以及绝对和相对导入之间的差异,并且无法弄清楚如何使用包,子包和模块执行常规操作,而无需简单地将所有内容放在sys.path上。我有一个两级包层次结构:
MyApp __init__.py Application __init__.py Module1 Module2 ... Domain __init__.py Module1 Module2 ... UI __init__.py Module1 Module2 ...
我希望能够做到以下几点:
我知道如何使用相对导入,以便将MyApp放在其sys.path上的外部代码可以导入MyApp,导入它想要的任何子包,并从其模块中导入内容,而每个子包中的模块可以从中导入其他模块相同的子包或兄弟包。但是,上面列出的开发需求似乎与子包结构不兼容 - 换句话说,我不能两种方式:从外部使用并且也从内部使用的结构良好的多级包层次结构,特别是用于测试但也因为来自一个设计级别(特别是UI)的模块不应该从下一个下面的设计级别导入模块。
对于这篇漫长的文章感到抱歉,但我认为这相当代表了许多人采用新的相对导入机制的斗争。
答案 0 :(得分:0)
我正在努力解决同样的问题,我能想到的唯一可行的方法就是放弃或改变你的第二点。 原因 - 据我了解如下:您将只想在子包和子模块中使用相对导入。这意味着必须导入顶级包。所以单元测试应该在顶级包之外并导入它。
如何在每个子包或-module中使用test
函数,以及从所有子包导入测试函数并执行它们的单个测试脚本?
答案 1 :(得分:-1)
我不知道这与相对进口有什么关系。相对导入允许与绝对导入完全相同的东西,只使用不同的表示法。