为什么我必须添加一个空白__init__.py文件以从子目录导入

时间:2015-05-19 10:52:41

标签: python

我可以使用空白__init__.py文件从子目录导入。这很好。我认为python中的init文件就像一个索引文件。但我真的不明白为什么导入__init__.py文件为空。 __init__.py文件和导入如何真正起作用?

什么是__init__.py个文件内容?

2 个答案:

答案 0 :(得分:2)

__init__.py有两个主要功能:

  • 标记包:它将目录标记为Python ,将内部.py文件标记为Python 模块

  • 初始化代码:顾名思义,导入包时会自动执行__init__.py中的所有代码。这是运行某个包所需的初始化代码的正确位置;但是,将__init__.py文件留空是完全可以的。

答案 1 :(得分:1)

如果文件中包含__init__.py文件,则从中导入的子目录是。您不需要使用包,只需将子目录添加到sys.path列表即可。然而,它们是将相关模块保持在一起的一种巧妙方式,并且通常受到鼓励。

__init__.py文件与类中__init__的目的相似,它初始化包。这样可以将属性赋予__all__就是一个示例(import *的导出名称列表)。

有时不需要初始化,因此它可以为空。查找示例的好地方是Lib目录的标准库子目录。在那里你会发现巨大的__init__.py个文件,以及其他空的文件。

这是否强制取决于Python版本。从Python 3.3开始,__init__.py不是必需的,此类包称为命名空间包,请参阅PEP0420。这意味着一个包可以跨越目录,但需要付出代价。可能没有__init__.py初始化代码,并且您没有获得包的__file__属性。因此,除非您特别需要跨目录,否则最好坚持使用常规包。