如果我的理解是正确的,__package__
和__name__
变量之间的区别是:
__init__.py
文件,它们都是相同的。__name__
将是完整路径,__package__
并将是它的目录。这样对吗?如果是这样,为什么 python 有必要在作用域中添加一个额外的变量,以便__package__
有人可以从中获取它__name__
?
例如,对于models.py
文件:
__name__
==> apps.main.models__module__
==> 应用程序.main__package__
并且与__name__
文件、路径或目录无关。如果您需要有关文件、路径和目录的信息,则由 给出__file__
,它存储 Python 为模块找到文件的相对或绝对文件系统路径。
如导入系统文档中所述,__name__
存储模块的完全限定名称,并__package__
用于支持主要模块的相关导入。任何作为 Python 入口点运行的模块都会获得 name '__main__'
,因此__name__
对于那里的相对导入毫无用处。__package__
说明在这种情况下基于相对导入的包。
例如,
random.__package__
is ''
,不是目录,因为random
is 是(非包)顶级模块,并且random
不允许在内部进行相对导入。__package__
and __name__
,因为__package__
和__name__
与文件系统无关。它没有__file__
,因为文件系统中没有隐式命名空间包的文件。foo
和文件__init__.py
并且bar.py
在里面foo
,并且你python -m foo.bar
从上面的目录运行foo
,那么foo/bar
将作为一个带有__name__ == '__main__'
and的模块运行__package__ == 'foo'
。本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句