__name__ 与 __package__ 在 python 中

信息

如果我的理解是正确的,__package____name__变量之间的区别是:

  • 对于__init__.py文件,它们都是相同的
  • 对于任何其他文件,__name__将是完整路径,__package__并将是它的目录。

这样对吗?如果是这样,为什么 python 有必要在作用域中添加一个额外的变量,以便__package__有人可以从中获取它__name__

例如,对于models.py文件:

  • __name__ ==> apps.main.models
  • __module__ ==> 应用程序.main
user2357112 支持莫妮卡

__package__并且与__name__文件、路径或目录无关。如果您需要有关文件、路径和目录的信息,则由 给出__file__,它存储 Python 为模块找到文件的相对或绝对文件系统路径。

导入系统文档中所述__name__存储模块的完全限定名称,并__package__用于支持主要模块的相关导入。任何作为 Python 入口点运行的模块都会获得 name '__main__',因此__name__对于那里的相对导入毫无用处。__package__说明在这种情况下基于相对导入的包。

例如,

  • random.__package__is '',不是目录,因为randomis 是(非包)顶级模块,并且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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Python中“ __package__”属性的用途是什么?

如何在Python模块中定义__name__变量?

在Python中获取调用函数模块的__name__

__name__如何在python装饰器中更改

如何从另一个python文件中的`if __name__ ==“ __main __”`中执行代码

Pycharm“Python 控制台”中的 exec(open) 函数不执行“if __name__ == '__main__”块

是否可以覆盖从python3中的对象派生的“ __name__”?

在Python中调用getLogger之前,是否需要显式检查__name__ ==“ __main__”?

运行`python -m unittest`会改变在回溯中打印被覆盖的`__name__`异常的方式

在Python multiprocessing.Process中,我们是否必须使用`__name__ == __main__`?

除了 __name__ 之外,在 Python 中的程序执行时设置了哪些变量?

如何從導入的庫中設置腳本的 __package__?

Python类变量名称与__name__

TypeVar,NewType中__name__的用途

当 .py 文件包含 __name__==__main 时,Python 中的方法执行优先级是什么?

python的__file __,__ name__和Object .__ class __.__ name__的Java等效项是什么?

python if __name__ ==“ __main__”:IndentationError:预期为缩进块

Python装饰器-<Classname>对象没有属性'__name__'

当从crontab运行python脚本时,__ name__是什么?

使用python-multiprocessing与if __name__ =='__main__'相关的谜

TCL等同于Python的`if __name__ ==“ __main __”`

将多个参数传递给 Python __name__=="__main__"

django KeyError:“'__ name__'不在全局变量中”

如果在IPython中__name__ =='__main__'

相当于Ruby中的`if __name__ =='__main __'`

如何在“if __name__ == '__main__'”中模拟.patch 变量

__init__.py中的__name__是什么?

對像中缺少 __name__ 和 __qualname__

在 Python 文件末尾添加 if __name__ == '__main__' 的用例是什么?将其添加到每个文件中是最佳做法吗?