为什么Django包含很多'__init__.py'文件?

3 投票
2 回答
3309 浏览
提问于 2025-04-15 17:31

在一个Django项目中,很多文件夹里都有一个叫做__init__.py的文件。我觉得这个文件是用来初始化某些东西的。那么,这个__init__.py文件到底是用来干嘛的呢?

2 个回答

7

你的问题不太清楚。你到底想问什么呢?

这个文件 __init__.py 是用来让你的文件夹被认定为 一个包,这样你就可以做一些事情,比如:

from myapp.models import Something
11

Python并不会把每个目录下的每个子目录都当作一个来处理,只有那些里面有一个叫做__init__.py的文件的子目录才会被认为是包。来看下面这个命令行的例子:

$ mkdir adir
$ echo 'print "hello world"' > adir/helo.py
$ python -c 'import adir.helo'
Traceback (most recent call last):
  File "<string>", line 1, in <module>
ImportError: No module named adir.helo
$ touch adir/__init__.py
$ python -c 'import adir.helo'
hello world

你看到了吗?如果只有目录adir,里面有一个模块helo.py,那么尝试去import adir.helo就会失败。但是如果在adir里也有__init__.py这个文件,那么Python就会知道adir是一个包,这样导入就成功了。

撰写回答