<p>I'm taking a look at how the model system in django works and I noticed something that I don't understand.</p>

<p>I know that you create an empty <code>__init__.py</code> file to specify that the current directory is a package.  And that you can set some variable in <code>__init__.py</code> so that import * works properly.</p>

<p>But django adds a bunch of from ... import ... statements and defines a bunch of classes in <code>__init__.py</code>.  Why?  Doesn't this just make things look messy?  Is there a reason that requires this code in <code>__init__.py</code>?</p>

All imports in
```
__init__.py
```
are made available when you import the package (directory) that contains it.
Example:
```
./dir/__init__.py
```
:
```
```
import something
```
```
```
./test.py
```
:
```
```
import dir
# can now use dir.something
```
```
EDIT: forgot to mention, the code in
```
__init__.py
```
runs the first time you import any module from that directory. So it's normally a good place to put any package-level initialisation code.
EDIT2: dgrant pointed out to a possible confusion in my example. In
```
__init__.py
```
```
import something
```
can import any module, not necessary from the package. For example, we can replace it with
```
import datetime
```
, then in our top level
```
test.py
```
both of these snippets will work:
```
```
import dir
print dir.datetime.datetime.now()
```
```
and
```
```
import dir.some_module_in_dir
print dir.datetime.datetime.now()
```
```
The bottom line is: all names assigned in
```
__init__.py
```
, be it imported modules, functions or classes, are automatically available in the package namespace whenever you import the package or a module in the package.