Why do I have to add a blank __init__.py file to import from subdirectories
我可以用空白的__init__.py文件从子目录导入。那很好。我认为python中的init文件工作起来就像一个索引文件。但我真的不明白为什么要导入__init__.py文件是空白的。__init__.py文件和导入是如何工作的?
什么必须是__init__.py文件内容?
__init__.py有两个主要功能:
- 这不是复制品吗?
- 谢谢你的回答,亚当!那个笔迹清晰的问号在我的脑海里。
- "阿尔皮当然可以。如果答案正确,不要忘记将其标记为"已接受",这样其他用户就不会在其上花费时间。
- @彼得伍德,据我所知。
如果您要从中导入的子目录中有__init__.py文件,则它是一个包。您不需要使用包,只需将子目录添加到sys.path列表中即可。然而,它们是将相关模块保持在一起的一种整洁的方式,并且通常是被鼓励的。
__init__.py文件与类中的__init__具有类似的用途,它初始化包。这样就可以为包提供属性,而__all__就是一个示例(import *的导出名称列表)。
有时不需要初始化,因此可以为空。在Lib目录的标准库子目录中是查找示例的好地方。在那里你会发现巨大的__init__.py文件,还有一些是空的。
这是否是必需的取决于Python版本。从python 3.3中,__init__.py不是必需的,并且这些包称为名称空间包,请参见pep0420。这意味着一个包可以跨越目录,但需要付出代价。不能有__init__.py初始化代码,也不能为包获得__file__属性。因此,除非您特别需要跨目录,否则最好使用常规包。