提议的主要更改是引入了新的模块级别属性__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__