【发布时间】:2016-06-22 17:39:06
【问题描述】:
__init__.py 到底有什么用?是的,我知道这个文件将一个目录变成了一个可导入的包。但是,请考虑以下示例:
project/
foo/
__init__.py
a.py
bar/
b.py
如果我想将a导入b,我必须添加以下语句:
sys.path.append('/path_to_foo')
import foo.a
无论有没有__init__.py,这都会成功运行。但是,如果没有sys.path.append 语句,无论有没有__init__.py,都会出现“无模块”错误。这使得似乎只有系统路径很重要,而__init__.py 没有任何影响。
为什么没有__init__.py,这个导入工作?
【问题讨论】:
-
如果你只是做
import foopython需要something来导入,所以它基本上是导入那个文件夹的__init__文件。 -
您需要
__init__.py才能执行import foo.bar。它的作用类似于类上的__init__方法。 -
另外,
__init__.py是使其工作所必需的,如果您尝试仅删除文件,那么它将使用已编译的__init__.pyc文件,该文件可能位于 @987654338 @子文件夹,如果你也删除它,那么你会看到它是必要的。