Python packages - import by class, not file

Say I have the following file structure:

app/
  app.py
  controllers/
    __init__.py
    project.py
    plugin.py

If app/controllers/project.py defines a class Project, app.py would import it like this:

from app.controllers.project import Project

I'd like to just be able to do:

from app.controllers import Project

How would this be done?


Solution 1:

You need to put

from project import Project

in controllers/__init__.py.

Note that when Absolute imports become the default (Python 2.7?), you will want to add a dot before the module name (to avoid collisions with a top-level model named project), i.e.,

from .project import Project