5.4.5. module.__path__

根据定义,如果一个模块具有 __path__ 属性,它就是包。

包的 __path__ 属性会在导入其子包期间被使用。 在导入机制内部,它的功能与 sys.path 基本相同,即在导入期间提供一个模块搜索位置列表。 但是,__path__ 通常会比 sys.path 受到更多限制。

__path__ 必须是由字符串组成的可迭代对象,但它也可以为空。 作用于 sys.path 的规则同样适用于包的 __path__,并且 sys.path_hooks (见下文) 会在遍历包的 __path__ 时被查询。

包的 __init__.py 文件可以设置或更改包的 __path__ 属性,而且这是在 PEP 420 之前实现命名空间包的典型方式。 随着 PEP 420 的引入,命名空间包不再需要提供仅包含 __path__ 操控代码的 __init__.py 文件;导入机制会自动为命名空间包正确地设置 __path__