Home | History | Annotate | Download | only in tutorial
      1 .. _tut-modules:
      2 
      3 *******
      4 Modules
      5 *******
      6 
      7 If you quit from the Python interpreter and enter it again, the definitions you
      8 have made (functions and variables) are lost. Therefore, if you want to write a
      9 somewhat longer program, you are better off using a text editor to prepare the
     10 input for the interpreter and running it with that file as input instead.  This
     11 is known as creating a *script*.  As your program gets longer, you may want to
     12 split it into several files for easier maintenance.  You may also want to use a
     13 handy function that you've written in several programs without copying its
     14 definition into each program.
     15 
     16 To support this, Python has a way to put definitions in a file and use them in a
     17 script or in an interactive instance of the interpreter. Such a file is called a
     18 *module*; definitions from a module can be *imported* into other modules or into
     19 the *main* module (the collection of variables that you have access to in a
     20 script executed at the top level and in calculator mode).
     21 
     22 A module is a file containing Python definitions and statements.  The file name
     23 is the module name with the suffix :file:`.py` appended.  Within a module, the
     24 module's name (as a string) is available as the value of the global variable
     25 ``__name__``.  For instance, use your favorite text editor to create a file
     26 called :file:`fibo.py` in the current directory with the following contents::
     27 
     28    # Fibonacci numbers module
     29 
     30    def fib(n):    # write Fibonacci series up to n
     31        a, b = 0, 1
     32        while b < n:
     33            print b,
     34            a, b = b, a+b
     35 
     36    def fib2(n):   # return Fibonacci series up to n
     37        result = []
     38        a, b = 0, 1
     39        while b < n:
     40            result.append(b)
     41            a, b = b, a+b
     42        return result
     43 
     44 Now enter the Python interpreter and import this module with the following
     45 command::
     46 
     47    >>> import fibo
     48 
     49 This does not enter the names of the functions defined in ``fibo``  directly in
     50 the current symbol table; it only enters the module name ``fibo`` there. Using
     51 the module name you can access the functions::
     52 
     53    >>> fibo.fib(1000)
     54    1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987
     55    >>> fibo.fib2(100)
     56    [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
     57    >>> fibo.__name__
     58    'fibo'
     59 
     60 If you intend to use a function often you can assign it to a local name::
     61 
     62    >>> fib = fibo.fib
     63    >>> fib(500)
     64    1 1 2 3 5 8 13 21 34 55 89 144 233 377
     65 
     66 
     67 .. _tut-moremodules:
     68 
     69 More on Modules
     70 ===============
     71 
     72 A module can contain executable statements as well as function definitions.
     73 These statements are intended to initialize the module. They are executed only
     74 the *first* time the module name is encountered in an import statement. [#]_
     75 (They are also run if the file is executed as a script.)
     76 
     77 Each module has its own private symbol table, which is used as the global symbol
     78 table by all functions defined in the module. Thus, the author of a module can
     79 use global variables in the module without worrying about accidental clashes
     80 with a user's global variables. On the other hand, if you know what you are
     81 doing you can touch a module's global variables with the same notation used to
     82 refer to its functions, ``modname.itemname``.
     83 
     84 Modules can import other modules.  It is customary but not required to place all
     85 :keyword:`import` statements at the beginning of a module (or script, for that
     86 matter).  The imported module names are placed in the importing module's global
     87 symbol table.
     88 
     89 There is a variant of the :keyword:`import` statement that imports names from a
     90 module directly into the importing module's symbol table.  For example::
     91 
     92    >>> from fibo import fib, fib2
     93    >>> fib(500)
     94    1 1 2 3 5 8 13 21 34 55 89 144 233 377
     95 
     96 This does not introduce the module name from which the imports are taken in the
     97 local symbol table (so in the example, ``fibo`` is not defined).
     98 
     99 There is even a variant to import all names that a module defines::
    100 
    101    >>> from fibo import *
    102    >>> fib(500)
    103    1 1 2 3 5 8 13 21 34 55 89 144 233 377
    104 
    105 This imports all names except those beginning with an underscore (``_``).
    106 
    107 Note that in general the practice of importing ``*`` from a module or package is
    108 frowned upon, since it often causes poorly readable code. However, it is okay to
    109 use it to save typing in interactive sessions.
    110 
    111 If the module name is followed by :keyword:`as`, then the name
    112 following :keyword:`as` is bound directly to the imported module.
    113 
    114 ::
    115 
    116    >>> import fibo as fib
    117    >>> fib.fib(500)
    118    0 1 1 2 3 5 8 13 21 34 55 89 144 233 377
    119 
    120 This is effectively importing the module in the same way that ``import fibo``
    121 will do, with the only difference of it being available as ``fib``.
    122 
    123 It can also be used when utilising :keyword:`from` with similar effects::
    124 
    125    >>> from fibo import fib as fibonacci
    126    >>> fibonacci(500)
    127    0 1 1 2 3 5 8 13 21 34 55 89 144 233 377
    128 
    129 
    130 .. note::
    131 
    132    For efficiency reasons, each module is only imported once per interpreter
    133    session.  Therefore, if you change your modules, you must restart the
    134    interpreter -- or, if it's just one module you want to test interactively,
    135    use :func:`reload`, e.g. ``reload(modulename)``.
    136 
    137 
    138 .. _tut-modulesasscripts:
    139 
    140 Executing modules as scripts
    141 ----------------------------
    142 
    143 When you run a Python module with ::
    144 
    145    python fibo.py <arguments>
    146 
    147 the code in the module will be executed, just as if you imported it, but with
    148 the ``__name__`` set to ``"__main__"``.  That means that by adding this code at
    149 the end of your module::
    150 
    151    if __name__ == "__main__":
    152        import sys
    153        fib(int(sys.argv[1]))
    154 
    155 you can make the file usable as a script as well as an importable module,
    156 because the code that parses the command line only runs if the module is
    157 executed as the "main" file:
    158 
    159 .. code-block:: shell-session
    160 
    161    $ python fibo.py 50
    162    1 1 2 3 5 8 13 21 34
    163 
    164 If the module is imported, the code is not run::
    165 
    166    >>> import fibo
    167    >>>
    168 
    169 This is often used either to provide a convenient user interface to a module, or
    170 for testing purposes (running the module as a script executes a test suite).
    171 
    172 
    173 .. _tut-searchpath:
    174 
    175 The Module Search Path
    176 ----------------------
    177 
    178 .. index:: triple: module; search; path
    179 
    180 When a module named :mod:`spam` is imported, the interpreter first searches for
    181 a built-in module with that name. If not found, it then searches for a file
    182 named :file:`spam.py` in a list of directories given by the variable
    183 :data:`sys.path`.  :data:`sys.path` is initialized from these locations:
    184 
    185 * the directory containing the input script (or the current directory).
    186 * :envvar:`PYTHONPATH` (a list of directory names, with the same syntax as the
    187   shell variable :envvar:`PATH`).
    188 * the installation-dependent default.
    189 
    190 After initialization, Python programs can modify :data:`sys.path`.  The
    191 directory containing the script being run is placed at the beginning of the
    192 search path, ahead of the standard library path. This means that scripts in that
    193 directory will be loaded instead of modules of the same name in the library
    194 directory. This is an error unless the replacement is intended.  See section
    195 :ref:`tut-standardmodules` for more information.
    196 
    197 
    198 "Compiled" Python files
    199 -----------------------
    200 
    201 As an important speed-up of the start-up time for short programs that use a lot
    202 of standard modules, if a file called :file:`spam.pyc` exists in the directory
    203 where :file:`spam.py` is found, this is assumed to contain an
    204 already-"byte-compiled" version of the module :mod:`spam`. The modification time
    205 of the version of :file:`spam.py` used to create :file:`spam.pyc` is recorded in
    206 :file:`spam.pyc`, and the :file:`.pyc` file is ignored if these don't match.
    207 
    208 Normally, you don't need to do anything to create the :file:`spam.pyc` file.
    209 Whenever :file:`spam.py` is successfully compiled, an attempt is made to write
    210 the compiled version to :file:`spam.pyc`.  It is not an error if this attempt
    211 fails; if for any reason the file is not written completely, the resulting
    212 :file:`spam.pyc` file will be recognized as invalid and thus ignored later.  The
    213 contents of the :file:`spam.pyc` file are platform independent, so a Python
    214 module directory can be shared by machines of different architectures.
    215 
    216 Some tips for experts:
    217 
    218 * When the Python interpreter is invoked with the :option:`-O` flag, optimized
    219   code is generated and stored in :file:`.pyo` files.  The optimizer currently
    220   doesn't help much; it only removes :keyword:`assert` statements.  When
    221   :option:`-O` is used, *all* :term:`bytecode` is optimized; ``.pyc`` files are
    222   ignored and ``.py`` files are compiled to optimized bytecode.
    223 
    224 * Passing two :option:`-O` flags to the Python interpreter (:option:`-OO`) will
    225   cause the bytecode compiler to perform optimizations that could in some rare
    226   cases result in malfunctioning programs.  Currently only ``__doc__`` strings are
    227   removed from the bytecode, resulting in more compact :file:`.pyo` files.  Since
    228   some programs may rely on having these available, you should only use this
    229   option if you know what you're doing.
    230 
    231 * A program doesn't run any faster when it is read from a :file:`.pyc` or
    232   :file:`.pyo` file than when it is read from a :file:`.py` file; the only thing
    233   that's faster about :file:`.pyc` or :file:`.pyo` files is the speed with which
    234   they are loaded.
    235 
    236 * When a script is run by giving its name on the command line, the bytecode for
    237   the script is never written to a :file:`.pyc` or :file:`.pyo` file.  Thus, the
    238   startup time of a script may be reduced by moving most of its code to a module
    239   and having a small bootstrap script that imports that module.  It is also
    240   possible to name a :file:`.pyc` or :file:`.pyo` file directly on the command
    241   line.
    242 
    243 * It is possible to have a file called :file:`spam.pyc` (or :file:`spam.pyo`
    244   when :option:`-O` is used) without a file :file:`spam.py` for the same module.
    245   This can be used to distribute a library of Python code in a form that is
    246   moderately hard to reverse engineer.
    247 
    248   .. index:: module: compileall
    249 
    250 * The module :mod:`compileall` can create :file:`.pyc` files (or :file:`.pyo`
    251   files when :option:`-O` is used) for all modules in a directory.
    252 
    253 
    254 .. _tut-standardmodules:
    255 
    256 Standard Modules
    257 ================
    258 
    259 .. index:: module: sys
    260 
    261 Python comes with a library of standard modules, described in a separate
    262 document, the Python Library Reference ("Library Reference" hereafter).  Some
    263 modules are built into the interpreter; these provide access to operations that
    264 are not part of the core of the language but are nevertheless built in, either
    265 for efficiency or to provide access to operating system primitives such as
    266 system calls.  The set of such modules is a configuration option which also
    267 depends on the underlying platform.  For example, the :mod:`winreg` module is only
    268 provided on Windows systems. One particular module deserves some attention:
    269 :mod:`sys`, which is built into every Python interpreter.  The variables
    270 ``sys.ps1`` and ``sys.ps2`` define the strings used as primary and secondary
    271 prompts::
    272 
    273    >>> import sys
    274    >>> sys.ps1
    275    '>>> '
    276    >>> sys.ps2
    277    '... '
    278    >>> sys.ps1 = 'C> '
    279    C> print 'Yuck!'
    280    Yuck!
    281    C>
    282 
    283 
    284 These two variables are only defined if the interpreter is in interactive mode.
    285 
    286 The variable ``sys.path`` is a list of strings that determines the interpreter's
    287 search path for modules. It is initialized to a default path taken from the
    288 environment variable :envvar:`PYTHONPATH`, or from a built-in default if
    289 :envvar:`PYTHONPATH` is not set.  You can modify it using standard list
    290 operations::
    291 
    292    >>> import sys
    293    >>> sys.path.append('/ufs/guido/lib/python')
    294 
    295 
    296 .. _tut-dir:
    297 
    298 The :func:`dir` Function
    299 ========================
    300 
    301 The built-in function :func:`dir` is used to find out which names a module
    302 defines.  It returns a sorted list of strings::
    303 
    304    >>> import fibo, sys
    305    >>> dir(fibo)
    306    ['__name__', 'fib', 'fib2']
    307    >>> dir(sys)  # doctest: +NORMALIZE_WHITESPACE
    308    ['__displayhook__', '__doc__', '__excepthook__', '__name__', '__package__',
    309     '__stderr__', '__stdin__', '__stdout__', '_clear_type_cache',
    310     '_current_frames', '_getframe', '_mercurial', 'api_version', 'argv',
    311     'builtin_module_names', 'byteorder', 'call_tracing', 'callstats',
    312     'copyright', 'displayhook', 'dont_write_bytecode', 'exc_clear', 'exc_info',
    313     'exc_traceback', 'exc_type', 'exc_value', 'excepthook', 'exec_prefix',
    314     'executable', 'exit', 'flags', 'float_info', 'float_repr_style',
    315     'getcheckinterval', 'getdefaultencoding', 'getdlopenflags',
    316     'getfilesystemencoding', 'getobjects', 'getprofile', 'getrecursionlimit',
    317     'getrefcount', 'getsizeof', 'gettotalrefcount', 'gettrace', 'hexversion',
    318     'long_info', 'maxint', 'maxsize', 'maxunicode', 'meta_path', 'modules',
    319     'path', 'path_hooks', 'path_importer_cache', 'platform', 'prefix', 'ps1',
    320     'py3kwarning', 'setcheckinterval', 'setdlopenflags', 'setprofile',
    321     'setrecursionlimit', 'settrace', 'stderr', 'stdin', 'stdout', 'subversion',
    322     'version', 'version_info', 'warnoptions']
    323 
    324 Without arguments, :func:`dir` lists the names you have defined currently::
    325 
    326    >>> a = [1, 2, 3, 4, 5]
    327    >>> import fibo
    328    >>> fib = fibo.fib
    329    >>> dir()
    330    ['__builtins__', '__name__', '__package__', 'a', 'fib', 'fibo', 'sys']
    331 
    332 Note that it lists all types of names: variables, modules, functions, etc.
    333 
    334 .. index:: module: __builtin__
    335 
    336 :func:`dir` does not list the names of built-in functions and variables.  If you
    337 want a list of those, they are defined in the standard module
    338 :mod:`__builtin__`::
    339 
    340    >>> import __builtin__
    341    >>> dir(__builtin__)  # doctest: +NORMALIZE_WHITESPACE
    342    ['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException',
    343     'BufferError', 'BytesWarning', 'DeprecationWarning', 'EOFError',
    344     'Ellipsis', 'EnvironmentError', 'Exception', 'False', 'FloatingPointError',
    345     'FutureWarning', 'GeneratorExit', 'IOError', 'ImportError', 'ImportWarning',
    346     'IndentationError', 'IndexError', 'KeyError', 'KeyboardInterrupt',
    347     'LookupError', 'MemoryError', 'NameError', 'None', 'NotImplemented',
    348     'NotImplementedError', 'OSError', 'OverflowError',
    349     'PendingDeprecationWarning', 'ReferenceError', 'RuntimeError',
    350     'RuntimeWarning', 'StandardError', 'StopIteration', 'SyntaxError',
    351     'SyntaxWarning', 'SystemError', 'SystemExit', 'TabError', 'True',
    352     'TypeError', 'UnboundLocalError', 'UnicodeDecodeError',
    353     'UnicodeEncodeError', 'UnicodeError', 'UnicodeTranslateError',
    354     'UnicodeWarning', 'UserWarning', 'ValueError', 'Warning',
    355     'ZeroDivisionError', '_', '__debug__', '__doc__', '__import__',
    356     '__name__', '__package__', 'abs', 'all', 'any', 'apply', 'basestring',
    357     'bin', 'bool', 'buffer', 'bytearray', 'bytes', 'callable', 'chr',
    358     'classmethod', 'cmp', 'coerce', 'compile', 'complex', 'copyright',
    359     'credits', 'delattr', 'dict', 'dir', 'divmod', 'enumerate', 'eval',
    360     'execfile', 'exit', 'file', 'filter', 'float', 'format', 'frozenset',
    361     'getattr', 'globals', 'hasattr', 'hash', 'help', 'hex', 'id', 'input',
    362     'int', 'intern', 'isinstance', 'issubclass', 'iter', 'len', 'license',
    363     'list', 'locals', 'long', 'map', 'max', 'memoryview', 'min', 'next',
    364     'object', 'oct', 'open', 'ord', 'pow', 'print', 'property', 'quit',
    365     'range', 'raw_input', 'reduce', 'reload', 'repr', 'reversed', 'round',
    366     'set', 'setattr', 'slice', 'sorted', 'staticmethod', 'str', 'sum', 'super',
    367     'tuple', 'type', 'unichr', 'unicode', 'vars', 'xrange', 'zip']
    368 
    369 
    370 .. _tut-packages:
    371 
    372 Packages
    373 ========
    374 
    375 Packages are a way of structuring Python's module namespace by using "dotted
    376 module names".  For example, the module name :mod:`A.B` designates a submodule
    377 named ``B`` in a package named ``A``.  Just like the use of modules saves the
    378 authors of different modules from having to worry about each other's global
    379 variable names, the use of dotted module names saves the authors of multi-module
    380 packages like NumPy or Pillow from having to worry about
    381 each other's module names.
    382 
    383 Suppose you want to design a collection of modules (a "package") for the uniform
    384 handling of sound files and sound data.  There are many different sound file
    385 formats (usually recognized by their extension, for example: :file:`.wav`,
    386 :file:`.aiff`, :file:`.au`), so you may need to create and maintain a growing
    387 collection of modules for the conversion between the various file formats.
    388 There are also many different operations you might want to perform on sound data
    389 (such as mixing, adding echo, applying an equalizer function, creating an
    390 artificial stereo effect), so in addition you will be writing a never-ending
    391 stream of modules to perform these operations.  Here's a possible structure for
    392 your package (expressed in terms of a hierarchical filesystem):
    393 
    394 .. code-block:: text
    395 
    396    sound/                          Top-level package
    397          __init__.py               Initialize the sound package
    398          formats/                  Subpackage for file format conversions
    399                  __init__.py
    400                  wavread.py
    401                  wavwrite.py
    402                  aiffread.py
    403                  aiffwrite.py
    404                  auread.py
    405                  auwrite.py
    406                  ...
    407          effects/                  Subpackage for sound effects
    408                  __init__.py
    409                  echo.py
    410                  surround.py
    411                  reverse.py
    412                  ...
    413          filters/                  Subpackage for filters
    414                  __init__.py
    415                  equalizer.py
    416                  vocoder.py
    417                  karaoke.py
    418                  ...
    419 
    420 When importing the package, Python searches through the directories on
    421 ``sys.path`` looking for the package subdirectory.
    422 
    423 The :file:`__init__.py` files are required to make Python treat the directories
    424 as containing packages; this is done to prevent directories with a common name,
    425 such as ``string``, from unintentionally hiding valid modules that occur later
    426 on the module search path. In the simplest case, :file:`__init__.py` can just be
    427 an empty file, but it can also execute initialization code for the package or
    428 set the ``__all__`` variable, described later.
    429 
    430 Users of the package can import individual modules from the package, for
    431 example::
    432 
    433    import sound.effects.echo
    434 
    435 This loads the submodule :mod:`sound.effects.echo`.  It must be referenced with
    436 its full name. ::
    437 
    438    sound.effects.echo.echofilter(input, output, delay=0.7, atten=4)
    439 
    440 An alternative way of importing the submodule is::
    441 
    442    from sound.effects import echo
    443 
    444 This also loads the submodule :mod:`echo`, and makes it available without its
    445 package prefix, so it can be used as follows::
    446 
    447    echo.echofilter(input, output, delay=0.7, atten=4)
    448 
    449 Yet another variation is to import the desired function or variable directly::
    450 
    451    from sound.effects.echo import echofilter
    452 
    453 Again, this loads the submodule :mod:`echo`, but this makes its function
    454 :func:`echofilter` directly available::
    455 
    456    echofilter(input, output, delay=0.7, atten=4)
    457 
    458 Note that when using ``from package import item``, the item can be either a
    459 submodule (or subpackage) of the package, or some  other name defined in the
    460 package, like a function, class or variable.  The ``import`` statement first
    461 tests whether the item is defined in the package; if not, it assumes it is a
    462 module and attempts to load it.  If it fails to find it, an :exc:`ImportError`
    463 exception is raised.
    464 
    465 Contrarily, when using syntax like ``import item.subitem.subsubitem``, each item
    466 except for the last must be a package; the last item can be a module or a
    467 package but can't be a class or function or variable defined in the previous
    468 item.
    469 
    470 
    471 .. _tut-pkg-import-star:
    472 
    473 Importing \* From a Package
    474 ---------------------------
    475 
    476 .. index:: single: __all__
    477 
    478 Now what happens when the user writes ``from sound.effects import *``?  Ideally,
    479 one would hope that this somehow goes out to the filesystem, finds which
    480 submodules are present in the package, and imports them all.  This could take a
    481 long time and importing sub-modules might have unwanted side-effects that should
    482 only happen when the sub-module is explicitly imported.
    483 
    484 The only solution is for the package author to provide an explicit index of the
    485 package.  The :keyword:`import` statement uses the following convention: if a package's
    486 :file:`__init__.py` code defines a list named ``__all__``, it is taken to be the
    487 list of module names that should be imported when ``from package import *`` is
    488 encountered.  It is up to the package author to keep this list up-to-date when a
    489 new version of the package is released.  Package authors may also decide not to
    490 support it, if they don't see a use for importing \* from their package.  For
    491 example, the file :file:`sound/effects/__init__.py` could contain the following
    492 code::
    493 
    494    __all__ = ["echo", "surround", "reverse"]
    495 
    496 This would mean that ``from sound.effects import *`` would import the three
    497 named submodules of the :mod:`sound` package.
    498 
    499 If ``__all__`` is not defined, the statement ``from sound.effects import *``
    500 does *not* import all submodules from the package :mod:`sound.effects` into the
    501 current namespace; it only ensures that the package :mod:`sound.effects` has
    502 been imported (possibly running any initialization code in :file:`__init__.py`)
    503 and then imports whatever names are defined in the package.  This includes any
    504 names defined (and submodules explicitly loaded) by :file:`__init__.py`.  It
    505 also includes any submodules of the package that were explicitly loaded by
    506 previous :keyword:`import` statements.  Consider this code::
    507 
    508    import sound.effects.echo
    509    import sound.effects.surround
    510    from sound.effects import *
    511 
    512 In this example, the :mod:`echo` and :mod:`surround` modules are imported in the
    513 current namespace because they are defined in the :mod:`sound.effects` package
    514 when the ``from...import`` statement is executed.  (This also works when
    515 ``__all__`` is defined.)
    516 
    517 Although certain modules are designed to export only names that follow certain
    518 patterns when you use ``import *``, it is still considered bad practice in
    519 production code.
    520 
    521 Remember, there is nothing wrong with using ``from Package import
    522 specific_submodule``!  In fact, this is the recommended notation unless the
    523 importing module needs to use submodules with the same name from different
    524 packages.
    525 
    526 
    527 Intra-package References
    528 ------------------------
    529 
    530 The submodules often need to refer to each other.  For example, the
    531 :mod:`surround` module might use the :mod:`echo` module.  In fact, such
    532 references are so common that the :keyword:`import` statement first looks in the
    533 containing package before looking in the standard module search path. Thus, the
    534 :mod:`surround` module can simply use ``import echo`` or ``from echo import
    535 echofilter``.  If the imported module is not found in the current package (the
    536 package of which the current module is a submodule), the :keyword:`import`
    537 statement looks for a top-level module with the given name.
    538 
    539 When packages are structured into subpackages (as with the :mod:`sound` package
    540 in the example), you can use absolute imports to refer to submodules of siblings
    541 packages.  For example, if the module :mod:`sound.filters.vocoder` needs to use
    542 the :mod:`echo` module in the :mod:`sound.effects` package, it can use ``from
    543 sound.effects import echo``.
    544 
    545 Starting with Python 2.5, in addition to the implicit relative imports described
    546 above, you can write explicit relative imports with the ``from module import
    547 name`` form of import statement. These explicit relative imports use leading
    548 dots to indicate the current and parent packages involved in the relative
    549 import. From the :mod:`surround` module for example, you might use::
    550 
    551    from . import echo
    552    from .. import formats
    553    from ..filters import equalizer
    554 
    555 Note that both explicit and implicit relative imports are based on the name of
    556 the current module. Since the name of the main module is always ``"__main__"``,
    557 modules intended for use as the main module of a Python application should
    558 always use absolute imports.
    559 
    560 
    561 Packages in Multiple Directories
    562 --------------------------------
    563 
    564 Packages support one more special attribute, :attr:`__path__`.  This is
    565 initialized to be a list containing the name of the directory holding the
    566 package's :file:`__init__.py` before the code in that file is executed.  This
    567 variable can be modified; doing so affects future searches for modules and
    568 subpackages contained in the package.
    569 
    570 While this feature is not often needed, it can be used to extend the set of
    571 modules found in a package.
    572 
    573 
    574 .. rubric:: Footnotes
    575 
    576 .. [#] In fact function definitions are also 'statements' that are 'executed'; the
    577    execution of a module-level function definition enters the function name in
    578    the module's global symbol table.
    579 
    580