GNU Info

Info Node: (python2.1-tut.info)Packages

(python2.1-tut.info)Packages


Prev: dir Function Up: Modules
Enter node , (file) or (file)node

Packages
========

Packages are a way of structuring Python's module namespace by using
"dotted module names".  For example, the module name `A.B' designates a
submodule named `B' in a package named `A'.  Just like the use of
modules saves the authors of different modules from having to worry
about each other's global variable names, the use of dotted module
names saves the authors of multi-module packages like NumPy or the
Python Imaging Library from having to worry about each other's module
names.

Suppose you want to design a collection of modules (a "package") for
the uniform handling of sound files and sound data.  There are many
different sound file formats (usually recognized by their extension,
e.g. `.wav', `.aiff', `.au'), so you may need to create and maintain a
growing collection of modules for the conversion between the various
file formats.  There are also many different operations you might want
to perform on sound data (e.g. mixing, adding echo, applying an
equalizer function, creating an artificial stereo effect), so in
addition you will be writing a never-ending stream of modules to
perform these operations.  Here's a possible structure for your package
(expressed in terms of a hierarchical filesystem):

     Sound/                          Top-level package
           __init__.py               Initialize the sound package
           Formats/                  Subpackage for file format conversions
                   __init__.py
                   wavread.py
                   wavwrite.py
                   aiffread.py
                   aiffwrite.py
                   auread.py
                   auwrite.py
                   ...
           Effects/                  Subpackage for sound effects
                   __init__.py
                   echo.py
                   surround.py
                   reverse.py
                   ...
           Filters/                  Subpackage for filters
                   __init__.py
                   equalizer.py
                   vocoder.py
                   karaoke.py
                   ...

The `__init__.py' files are required to make Python treat the
directories as containing packages; this is done to prevent directories
with a common name, such as `string', from unintentionally hiding valid
modules that occur later on the module search path. In the simplest
case, `__init__.py' can just be an empty file, but it can also execute
initialization code for the package or set the `__all__' variable,
described later.

Users of the package can import individual modules from the package,
for example:

     import Sound.Effects.echo

This loads the submodule `Sound.Effects.echo'.  It must be referenced
with its full name, e.g.

     Sound.Effects.echo.echofilter(input, output, delay=0.7, atten=4)

An alternative way of importing the submodule is:

     from Sound.Effects import echo

This also loads the submodule `echo', and makes it available without
its package prefix, so it can be used as follows:

     echo.echofilter(input, output, delay=0.7, atten=4)

Yet another variation is to import the desired function or variable
directly:

     from Sound.Effects.echo import echofilter

Again, this loads the submodule `echo', but this makes its function
`echofilter()' directly available:

     echofilter(input, output, delay=0.7, atten=4)

Note that when using `from PACKAGE import ITEM', the item can be either
a submodule (or subpackage) of the package, or some other name defined
in the package, like a function, class or variable.  The `import'
statement first tests whether the item is defined in the package; if
not, it assumes it is a module and attempts to load it.  If it fails to
find it, an `ImportError' exception is raised.

Contrarily, when using syntax like `import ITEM.SUBITEM.SUBSUBITEM',
each item except for the last must be a package; the last item can be a
module or a package but can't be a class or function or variable
defined in the previous item.

Importing * From a Package
Intra-package References

automatically generated by info2www version 1.2.2.9