为什么在Python中隐式导入子包?

Syr*_*jor 5 python import

我有一个名为Python包a带有两个文件__init__.pyb.

a/
a/__init__.py
a/b.py
Run Code Online (Sandbox Code Playgroud)

文件内容:

# a/__init__.py
from .b import *
Run Code Online (Sandbox Code Playgroud)

# a/b.py
c = 1
Run Code Online (Sandbox Code Playgroud)

当我a在Python中导入时,为什么我可以a.b直接使用?我很困惑,因为我没有b明确导入a/__init__.py.

如果我使用 a/__init__.py,那么ba命名空间中没有.所以它似乎from .b import *(或from .b import c)也是重要的b,为什么?

我已经检查了Python文档和SO中的几个帖子,但没有找到相关问题.


我想要所有的东西,b但不是b自己a,然后我可以修改a/__init__.py

# a/__init__.py
from .b import *
del b
Run Code Online (Sandbox Code Playgroud)

这个好吗?