Python 为什么我必须添加一个空白的_init__u;.py文件来从子目录导入
我可以使用一个空白的Python 为什么我必须添加一个空白的_init__u;.py文件来从子目录导入,python,Python,我可以使用一个空白的\uuuu init\uuuu.py文件从子目录导入。那很好。我认为python中的init文件与索引文件类似。但是我真的不明白为什么导入的\uuuu init\uuuu.py文件是空的。\uuuu init\uuuuu.py文件和导入如何真正起作用 文件内容必须是什么?该文件有两个主要功能: 标记包:它将目录标记为Python包,将内部.py文件标记为Python模块 初始化代码:顾名思义,导入包时,\uuuu init\uuuu.py中的任何代码都会自动执行。这是运行特
\uuuu init\uuuu.py
文件从子目录导入。那很好。我认为python中的init文件与索引文件类似。但是我真的不明白为什么导入的\uuuu init\uuuu.py
文件是空的。\uuuu init\uuuuu.py
文件和导入如何真正起作用
文件内容必须是什么?该文件有两个主要功能:
- 标记包:它将目录标记为Python包,将内部
文件标记为Python模块.py
- 初始化代码:顾名思义,导入包时,
中的任何代码都会自动执行。这是运行特定包所需的初始化代码的正确位置;但是,完全可以将\uuuu init\uuuu.py
文件保留为空\uuuu init\uuuu.py
\uuu init\uuuuuuuuuy.py
文件,则该子目录是一个包。您不需要使用包,只需将子目录添加到sys.path
列表中即可。但是,它们是将相关模块保持在一起的一种简洁方式,通常受到鼓励
\uuuu init\uuuu.py
文件与类中的\uuuuu init\uuuu
具有类似的用途,它初始化包。这允许为包指定属性,例如\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
(导入的导出名称列表*)
有时不需要初始化,因此可以为空。查找示例的好地方是Lib
目录的标准库子目录。在那里你会发现巨大的\uuuu init\uuuuuuuupy
文件和其他空文件
这是否是强制性的取决于Python版本。在Python3.3中,
\uuu init\uu.py
不是必需的,这样的包称为名称空间包,请参阅。这意味着一个包可以跨越目录,但要付出代价。不能有\uuuuuu init\uuuuuuuuupy
初始化代码,也不能获得包的\uuuuuuuuuuuuuuuuuuuuuuuu
属性。因此,除非您特别需要跨目录,否则最好还是使用常规软件包。因为Python规范需要它?这不是重复的吗?谢谢您的回答!那在我的脑海里留下了问号。如果答案正确,别忘了将其标记为已接受,这样其他用户就不会在上面花费时间了。@PeterWood据我所知不是这样。