标头可能很难理解,但我会尽力解释。

我有一个名为SubModule的文件夹,其中总共包含3个文件:

__init__.py
Class1.py
Class2.py


__init__.py里面,我得到了:

import Class1
import Class2

def main():
    c1 = Class1.Class1()
    c2 = Class2.Class2()

if __name__ == "__main__":
    main()


一切正常,没有错误,我可以正确使用c1和c2。



当我尝试将SubModule文件夹移动到其他模块的文件夹(我们称为MainModule)文件夹下时,出现问题。
因此,我将得到以下内容:

MainModule\__init__.py
MainModule\SubModule\__init__.py
MainModule\SubModule\Class1.py
MainModule\SubModule\Class2.py


现在,当我尝试从SubModule导入MainModule\__init__.py时,如下所示:

import SubModule
c1 = SubModule.ClassOne.ClassOne()
c2 = SubModule.ClassTwo.ClassTwo()


我希望这能奏效。
但是,运行MainModule\__init__.py会引起SubModule\__init__.py错误:

Traceback (most recent call last):
  File "C:\...\MainModule\__init__.py", line 1, in <module>
    import SubModule
  File "C:\...\MainModule\SubModule\__init__.py", line 1, in <module>
    import Class1
ImportError: No module named 'Class1'


如您所见,错误来自import Class1,它告诉我No module named 'Class1'
这是因为路径现在是SubModule.Class1,而不只是Class1
通过将SubModule\__init__.py更改为此,我可以摆脱此错误:

import SubModule.Class1
import SubModule.Class2


但是,我不能再通过运行SubModule单独使用SubModule\__init__.py,因为路径将再次是import Class1,而不是import SubModule.Class1

这让我发疯,有没有一种方法可以概括导入,所以哪个模块导入SubModule都没关系?

最佳答案

有一种方法,不完全是“通用”,而是...

try:
    import Submodule.Class1 as Class1
except ImportError:
    import Class1

09-27 01:17