项目设计 - 如何在 main.py 中导入子模块?

Project design - How to import a Child module in main.py?

我的项目设计如下:

folder/

    folder/main.py

    folder/package1

        folder/package1/__init__.py (contains __all__ = ["Parent", "Child"])
        folder/package1/Parent.py (abstract class)
        folder/package1/Child.py

    folder/package2
        folder/package2/__init__.py (contains __all__ = ["Class"])
        folder/package2/Class.py

在 Child.py 我有:

from Parent import *

在main.py中,我有:

from package1 import Child

当我 运行 main.py 时,我得到错误:

Traceback (most recent call last)
File ".\folder\main.py", line 2, in <module>
   from package1 import *
File ".\Package1\Child.py", line 1, in <module>
   from Parent import *
ModuleNotFoundError: No module named 'Parent'

当我通过终端导航到 package1 然后 运行 Child.py 时,它执行时没有任何错误。

知道 运行 宁 main.py 时可能导致错误的原因吗?

使用

from folder.package1.Parent import *

from package1.Parent import *

取决于此项目的文件夹系统。

但在导入模块之前指定包的名称很重要。

由于您使用的是相对导入,我建议使用

from .Parent import *

而不是

from Parent import *

因为这将指示python在当前目录中搜索父模块