标头可能很难理解,但我会尽力解释。
我有一个名为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