在python中,包含一个或多个模块的目录有时会有__init__.py
,因此可以将目录视为python package
,这是正确的吗? __init__
有什么不同? (还有一个Q,是一个python模块,只是一个python代码文件,有相关的,可能是独立的(对其他文件)一组类,函数和变量?)
答案 0 :(得分:4)
以下是explanation为什么需要__init__.py
:
需要
__init__.py
个文件才能使Python将目录视为包含包;这样做是为了防止具有通用名称的目录(例如string
)无意中隐藏稍后在模块搜索路径上发生的有效模块。在最简单的情况下,__init__.py
可以只是一个空文件,但它也可以执行包的初始化代码或设置__all__
变量,稍后将对此进行描述。
正如我刚刚推荐的另一张海报,tutorial on modules非常有用。
答案 1 :(得分:2)
此外,__init__.py
的内容在被视为模块时成为包的内容,即somepackage/__init__.py
的内容将在dir(somepackage)
中找到import somepackage
}。
模块本身可以是Python代码specially-crafted C code,也可以由加载Python VM的可执行文件注入an artificial construct。