symbian-qemu-0.9.1-12/python-2.6.1/Doc/library/imp.rst
changeset 1 2fb8b9db1c86
equal deleted inserted replaced
0:ffa851df0825 1:2fb8b9db1c86
       
     1 
       
     2 :mod:`imp` --- Access the :keyword:`import` internals
       
     3 =====================================================
       
     4 
       
     5 .. module:: imp
       
     6    :synopsis: Access the implementation of the import statement.
       
     7 
       
     8 
       
     9 .. index:: statement: import
       
    10 
       
    11 This module provides an interface to the mechanisms used to implement the
       
    12 :keyword:`import` statement.  It defines the following constants and functions:
       
    13 
       
    14 
       
    15 .. function:: get_magic()
       
    16 
       
    17    .. index:: pair: file; byte-code
       
    18 
       
    19    Return the magic string value used to recognize byte-compiled code files
       
    20    (:file:`.pyc` files).  (This value may be different for each Python version.)
       
    21 
       
    22 
       
    23 .. function:: get_suffixes()
       
    24 
       
    25    Return a list of 3-element tuples, each describing a particular type of
       
    26    module. Each triple has the form ``(suffix, mode, type)``, where *suffix* is
       
    27    a string to be appended to the module name to form the filename to search
       
    28    for, *mode* is the mode string to pass to the built-in :func:`open` function
       
    29    to open the file (this can be ``'r'`` for text files or ``'rb'`` for binary
       
    30    files), and *type* is the file type, which has one of the values
       
    31    :const:`PY_SOURCE`, :const:`PY_COMPILED`, or :const:`C_EXTENSION`, described
       
    32    below.
       
    33 
       
    34 
       
    35 .. function:: find_module(name[, path])
       
    36 
       
    37    Try to find the module *name* on the search path *path*.  If *path* is a list
       
    38    of directory names, each directory is searched for files with any of the
       
    39    suffixes returned by :func:`get_suffixes` above.  Invalid names in the list
       
    40    are silently ignored (but all list items must be strings).  If *path* is
       
    41    omitted or ``None``, the list of directory names given by ``sys.path`` is
       
    42    searched, but first it searches a few special places: it tries to find a
       
    43    built-in module with the given name (:const:`C_BUILTIN`), then a frozen
       
    44    module (:const:`PY_FROZEN`), and on some systems some other places are looked
       
    45    in as well (on Windows, it looks in the registry which may point to a
       
    46    specific file).
       
    47 
       
    48    If search is successful, the return value is a 3-element tuple ``(file,
       
    49    pathname, description)``:
       
    50 
       
    51    *file* is an open file object positioned at the beginning, *pathname* is the
       
    52    pathname of the file found, and *description* is a 3-element tuple as
       
    53    contained in the list returned by :func:`get_suffixes` describing the kind of
       
    54    module found.
       
    55 
       
    56    If the module does not live in a file, the returned *file* is ``None``,
       
    57    *pathname* is the empty string, and the *description* tuple contains empty
       
    58    strings for its suffix and mode; the module type is indicated as given in
       
    59    parentheses above.  If the search is unsuccessful, :exc:`ImportError` is
       
    60    raised.  Other exceptions indicate problems with the arguments or
       
    61    environment.
       
    62 
       
    63    If the module is a package, *file* is ``None``, *pathname* is the package
       
    64    path and the last item in the *description* tuple is :const:`PKG_DIRECTORY`.
       
    65 
       
    66    This function does not handle hierarchical module names (names containing
       
    67    dots).  In order to find *P*.*M*, that is, submodule *M* of package *P*, use
       
    68    :func:`find_module` and :func:`load_module` to find and load package *P*, and
       
    69    then use :func:`find_module` with the *path* argument set to ``P.__path__``.
       
    70    When *P* itself has a dotted name, apply this recipe recursively.
       
    71 
       
    72 
       
    73 .. function:: load_module(name, file, pathname, description)
       
    74 
       
    75    .. index:: builtin: reload
       
    76 
       
    77    Load a module that was previously found by :func:`find_module` (or by an
       
    78    otherwise conducted search yielding compatible results).  This function does
       
    79    more than importing the module: if the module was already imported, it is
       
    80    equivalent to a :func:`reload`!  The *name* argument indicates the full
       
    81    module name (including the package name, if this is a submodule of a
       
    82    package).  The *file* argument is an open file, and *pathname* is the
       
    83    corresponding file name; these can be ``None`` and ``''``, respectively, when
       
    84    the module is a package or not being loaded from a file.  The *description*
       
    85    argument is a tuple, as would be returned by :func:`get_suffixes`, describing
       
    86    what kind of module must be loaded.
       
    87 
       
    88    If the load is successful, the return value is the module object; otherwise,
       
    89    an exception (usually :exc:`ImportError`) is raised.
       
    90 
       
    91    **Important:** the caller is responsible for closing the *file* argument, if
       
    92    it was not ``None``, even when an exception is raised.  This is best done
       
    93    using a :keyword:`try` ... :keyword:`finally` statement.
       
    94 
       
    95 
       
    96 .. function:: new_module(name)
       
    97 
       
    98    Return a new empty module object called *name*.  This object is *not* inserted
       
    99    in ``sys.modules``.
       
   100 
       
   101 
       
   102 .. function:: lock_held()
       
   103 
       
   104    Return ``True`` if the import lock is currently held, else ``False``. On
       
   105    platforms without threads, always return ``False``.
       
   106 
       
   107    On platforms with threads, a thread executing an import holds an internal lock
       
   108    until the import is complete. This lock blocks other threads from doing an
       
   109    import until the original import completes, which in turn prevents other threads
       
   110    from seeing incomplete module objects constructed by the original thread while
       
   111    in the process of completing its import (and the imports, if any, triggered by
       
   112    that).
       
   113 
       
   114 
       
   115 .. function:: acquire_lock()
       
   116 
       
   117    Acquire the interpreter's import lock for the current thread.  This lock should
       
   118    be used by import hooks to ensure thread-safety when importing modules. On
       
   119    platforms without threads, this function does nothing.
       
   120 
       
   121    Once a thread has acquired the import lock, the same thread may acquire it
       
   122    again without blocking; the thread must release it once for each time it has
       
   123    acquired it.
       
   124 
       
   125    On platforms without threads, this function does nothing.
       
   126 
       
   127    .. versionadded:: 2.3
       
   128 
       
   129 
       
   130 .. function:: release_lock()
       
   131 
       
   132    Release the interpreter's import lock. On platforms without threads, this
       
   133    function does nothing.
       
   134 
       
   135    .. versionadded:: 2.3
       
   136 
       
   137 The following constants with integer values, defined in this module, are used to
       
   138 indicate the search result of :func:`find_module`.
       
   139 
       
   140 
       
   141 .. data:: PY_SOURCE
       
   142 
       
   143    The module was found as a source file.
       
   144 
       
   145 
       
   146 .. data:: PY_COMPILED
       
   147 
       
   148    The module was found as a compiled code object file.
       
   149 
       
   150 
       
   151 .. data:: C_EXTENSION
       
   152 
       
   153    The module was found as dynamically loadable shared library.
       
   154 
       
   155 
       
   156 .. data:: PKG_DIRECTORY
       
   157 
       
   158    The module was found as a package directory.
       
   159 
       
   160 
       
   161 .. data:: C_BUILTIN
       
   162 
       
   163    The module was found as a built-in module.
       
   164 
       
   165 
       
   166 .. data:: PY_FROZEN
       
   167 
       
   168    The module was found as a frozen module (see :func:`init_frozen`).
       
   169 
       
   170 The following constant and functions are obsolete; their functionality is
       
   171 available through :func:`find_module` or :func:`load_module`. They are kept
       
   172 around for backward compatibility:
       
   173 
       
   174 
       
   175 .. data:: SEARCH_ERROR
       
   176 
       
   177    Unused.
       
   178 
       
   179 
       
   180 .. function:: init_builtin(name)
       
   181 
       
   182    Initialize the built-in module called *name* and return its module object along
       
   183    with storing it in ``sys.modules``.  If the module was already initialized, it
       
   184    will be initialized *again*.  Re-initialization involves the copying of the
       
   185    built-in module's ``__dict__`` from the cached module over the module's entry in
       
   186    ``sys.modules``.  If there is no built-in module called *name*, ``None`` is
       
   187    returned.
       
   188 
       
   189 
       
   190 .. function:: init_frozen(name)
       
   191 
       
   192    Initialize the frozen module called *name* and return its module object.  If
       
   193    the module was already initialized, it will be initialized *again*.  If there
       
   194    is no frozen module called *name*, ``None`` is returned.  (Frozen modules are
       
   195    modules written in Python whose compiled byte-code object is incorporated
       
   196    into a custom-built Python interpreter by Python's :program:`freeze`
       
   197    utility. See :file:`Tools/freeze/` for now.)
       
   198 
       
   199 
       
   200 .. function:: is_builtin(name)
       
   201 
       
   202    Return ``1`` if there is a built-in module called *name* which can be
       
   203    initialized again.  Return ``-1`` if there is a built-in module called *name*
       
   204    which cannot be initialized again (see :func:`init_builtin`).  Return ``0`` if
       
   205    there is no built-in module called *name*.
       
   206 
       
   207 
       
   208 .. function:: is_frozen(name)
       
   209 
       
   210    Return ``True`` if there is a frozen module (see :func:`init_frozen`) called
       
   211    *name*, or ``False`` if there is no such module.
       
   212 
       
   213 
       
   214 .. function:: load_compiled(name, pathname, [file])
       
   215 
       
   216    .. index:: pair: file; byte-code
       
   217 
       
   218    Load and initialize a module implemented as a byte-compiled code file and return
       
   219    its module object.  If the module was already initialized, it will be
       
   220    initialized *again*.  The *name* argument is used to create or access a module
       
   221    object.  The *pathname* argument points to the byte-compiled code file.  The
       
   222    *file* argument is the byte-compiled code file, open for reading in binary mode,
       
   223    from the beginning. It must currently be a real file object, not a user-defined
       
   224    class emulating a file.
       
   225 
       
   226 
       
   227 .. function:: load_dynamic(name, pathname[, file])
       
   228 
       
   229    Load and initialize a module implemented as a dynamically loadable shared
       
   230    library and return its module object.  If the module was already initialized, it
       
   231    will be initialized *again*. Re-initialization involves copying the ``__dict__``
       
   232    attribute of the cached instance of the module over the value used in the module
       
   233    cached in ``sys.modules``.  The *pathname* argument must point to the shared
       
   234    library.  The *name* argument is used to construct the name of the
       
   235    initialization function: an external C function called ``initname()`` in the
       
   236    shared library is called.  The optional *file* argument is ignored.  (Note:
       
   237    using shared libraries is highly system dependent, and not all systems support
       
   238    it.)
       
   239 
       
   240 
       
   241 .. function:: load_source(name, pathname[, file])
       
   242 
       
   243    Load and initialize a module implemented as a Python source file and return its
       
   244    module object.  If the module was already initialized, it will be initialized
       
   245    *again*.  The *name* argument is used to create or access a module object.  The
       
   246    *pathname* argument points to the source file.  The *file* argument is the
       
   247    source file, open for reading as text, from the beginning. It must currently be
       
   248    a real file object, not a user-defined class emulating a file.  Note that if a
       
   249    properly matching byte-compiled file (with suffix :file:`.pyc` or :file:`.pyo`)
       
   250    exists, it will be used instead of parsing the given source file.
       
   251 
       
   252 
       
   253 .. class:: NullImporter(path_string)
       
   254 
       
   255    The :class:`NullImporter` type is a :pep:`302` import hook that handles
       
   256    non-directory path strings by failing to find any modules.  Calling this type
       
   257    with an existing directory or empty string raises :exc:`ImportError`.
       
   258    Otherwise, a :class:`NullImporter` instance is returned.
       
   259 
       
   260    Python adds instances of this type to ``sys.path_importer_cache`` for any path
       
   261    entries that are not directories and are not handled by any other path hooks on
       
   262    ``sys.path_hooks``.  Instances have only one method:
       
   263 
       
   264 
       
   265    .. method:: NullImporter.find_module(fullname [, path])
       
   266 
       
   267       This method always returns ``None``, indicating that the requested module could
       
   268       not be found.
       
   269 
       
   270    .. versionadded:: 2.5
       
   271 
       
   272 
       
   273 .. _examples-imp:
       
   274 
       
   275 Examples
       
   276 --------
       
   277 
       
   278 The following function emulates what was the standard import statement up to
       
   279 Python 1.4 (no hierarchical module names).  (This *implementation* wouldn't work
       
   280 in that version, since :func:`find_module` has been extended and
       
   281 :func:`load_module` has been added in 1.4.) ::
       
   282 
       
   283    import imp
       
   284    import sys
       
   285 
       
   286    def __import__(name, globals=None, locals=None, fromlist=None):
       
   287        # Fast path: see if the module has already been imported.
       
   288        try:
       
   289            return sys.modules[name]
       
   290        except KeyError:
       
   291            pass
       
   292 
       
   293        # If any of the following calls raises an exception,
       
   294        # there's a problem we can't handle -- let the caller handle it.
       
   295 
       
   296        fp, pathname, description = imp.find_module(name)
       
   297 
       
   298        try:
       
   299            return imp.load_module(name, fp, pathname, description)
       
   300        finally:
       
   301            # Since we may exit via an exception, close fp explicitly.
       
   302            if fp:
       
   303                fp.close()
       
   304 
       
   305 .. index::
       
   306    builtin: reload
       
   307    module: knee
       
   308 
       
   309 A more complete example that implements hierarchical module names and includes a
       
   310 :func:`reload` function can be found in the module :mod:`knee`.  The :mod:`knee`
       
   311 module can be found in :file:`Demo/imputil/` in the Python source distribution.
       
   312