source: vendor/python/2.5/Doc/lib/libimp.tex

Last change on this file was 3225, checked in by bird, 18 years ago

Python 2.5

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