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__
。