项目设计 - 如何在 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在当前目录中搜索父模块
我的项目设计如下:
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在当前目录中搜索父模块