How python source code in large projects are organized?
chris.arndt at web.de
Sat Sep 26 18:30:09 CEST 2009
On 20 Sep., 22:10, exar... at twistedmatrix.com wrote:
> On 07:10 pm, pengyu... at gmail.com wrote:
> >On Sun, Sep 20, 2009 at 11:31 AM, Daniel Fetchinson
> ><fetchin... at googlemail.com> wrote:
> >>>I am wondering what is the best way of organizing python source code
> >>>in a large projects. There are package code, testing code. I'm
> >>>wondering if there has been any summary on previous practices.
> >>I suggest looking at the source code of large projects like twisted,
> >>PIL, django, turbogears, etc. These have different styles, pick the
> >>one you like best.
Start by having a standard for structuring the single Python files. I
like to have mine organized like this:
- encoding declaration
- module docstring
- __all__ symbol export list
- standard library
- project specific
- author, version, date and copyright information
- globals (logging setup, constants, etc.)
- utility functions
- "main" function (some like to have this at the top)
- if __name__ == '__main__': clause
For sub-packages, like to have the following layout:
If a package is not too big, the test may also go into a "test" sub-
directory of the main package.
I have an __all__ symbol export list in all module file, so then in in
__init__.py I can do:
from base import *
from exception import *
from module1 import this, that
from module2 import foo, bar
without worrying about import too much and in my main package I can
from package import this, bar
And in e.g. package.module1 I can do
from package.exceptions import SomeError
without having to worry about circular imports.
If my package has any code to be called directly from the command
line, I create a script in the root of the distribution or in a "bin"
and in that script:
from mainpackage import run
# from mainpackage.command.mycommand import run
you can also add a command line script entry point to your setup
script to let this script be automatically created on installation by
setuptools/easy_install. Look at the TurboGears 1.1 branch for
More information about the Python-list