请参阅PEP
366和导入系统参考文档:
提议的主要更改是引入了新的模块级别属性
__package__。如果存在,则相对导入将基于此属性而非模块__name__属性。
和
*
__package__应该设置模块的属性。它的值必须是字符串,但可以与其值相同__name__。如果该属性设置为None或丢失,则导入系统将使用更合适的值填充该属性。当模块是软件包时,其__package__值应设置为__name__。如果模块不是软件包,__package__则对于顶级模块或子模块,应将其设置为空字符串,并将其设置为父软件包的名称。有关更多详细信息,请参见PEP
366。
因此,对于位于中的模块
foo/bar/baz.py,
__name__将设置为
foo.bar.baz,并将
__package__其设置为
foo.bar,而同时对和属性
foo/bar/__init__.py都具有。
foo.bar``__name__``__package__



