我该如何让功能直接从我的包中访问(而不是该包内的一个模块)?
文件名为__init__.py
的文件用于标记磁盘上的目录为Python包目录。
如果你有以下文件:
mydir/spam/__init__.py mydir/spam/module.py
并且mydir
在你的路径中,你可以这样导入module.py
中的代码:
import spam.module
或者
from spam import module
如果你移除__init__.py
文件,Python将不再在该目录中查找子模块,所以导入该模块的尝试将失败。
__init__.py
文件通常是空的,但可以用于将包的选定部分以更方便的名称导出,保存便捷函数等。
根据上面的示例,可以这样访问init模块的内容:
import spam
基于这个。
在早期的Python版本中(3.3之前),__init__.py
是包("regular package")的必需部分,而在较新的Python 3.3+版本中则是"namespace package"。
这是文档。
Python定义了两种类型的包,分别是传统的"regular packages"和"namespace packages"。"Regular packages"是指在Python 3.2及其以前版本中存在的传统包。"Regular packages"通常实现为包含一个
__init__.py
文件的目录。当导入一个"regular package"时,该__init__.py
文件会被隐式执行,并将它定义的对象绑定到该包的命名空间中。该__init__.py
文件可以包含与任何其他模块相同的Python代码,当它被导入时,Python会为该模块添加一些额外的属性。
但是只需点击链接,它包含一个示例、更多信息以及"namespace packages"的解释,这种包没有__init__.py
。