blob: 7b8133beca50fb10db21ef4056560371298c3eda [file] [log] [blame]
Georg Brandl116aa622007-08-15 14:28:22 +00001
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
11This 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
Guido van Rossum04110fb2007-08-24 16:32:05 +000025 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.
Georg Brandl116aa622007-08-15 14:28:22 +000033
34
35.. function:: find_module(name[, path])
36
Guido van Rossum04110fb2007-08-24 16:32:05 +000037 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 the Mac, it looks for a resource (:const:`PY_RESOURCE`); on
46 Windows, it looks in the registry which may point to a specific file).
Georg Brandl116aa622007-08-15 14:28:22 +000047
Guido van Rossum04110fb2007-08-24 16:32:05 +000048 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
Georg Brandl116aa622007-08-15 14:28:22 +000053 contained in the list returned by :func:`get_suffixes` describing the kind of
Guido van Rossum04110fb2007-08-24 16:32:05 +000054 module found.
Georg Brandl116aa622007-08-15 14:28:22 +000055
Guido van Rossum04110fb2007-08-24 16:32:05 +000056 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
Georg Brandl116aa622007-08-15 14:28:22 +000068 :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
Guido van Rossum04110fb2007-08-24 16:32:05 +000073.. function:: load_module(name, file, pathname, description)
Georg Brandl116aa622007-08-15 14:28:22 +000074
75 Load a module that was previously found by :func:`find_module` (or by an
76 otherwise conducted search yielding compatible results). This function does
77 more than importing the module: if the module was already imported, it will
Guido van Rossum04110fb2007-08-24 16:32:05 +000078 reload the module! The *name* argument indicates the full
79 module name (including the package name, if this is a submodule of a
80 package). The *file* argument is an open file, and *pathname* is the
81 corresponding file name; these can be ``None`` and ``''``, respectively, when
82 the module is a package or not being loaded from a file. The *description*
83 argument is a tuple, as would be returned by :func:`get_suffixes`, describing
84 what kind of module must be loaded.
Georg Brandl116aa622007-08-15 14:28:22 +000085
Guido van Rossum04110fb2007-08-24 16:32:05 +000086 If the load is successful, the return value is the module object; otherwise,
87 an exception (usually :exc:`ImportError`) is raised.
Georg Brandl116aa622007-08-15 14:28:22 +000088
Guido van Rossum04110fb2007-08-24 16:32:05 +000089 **Important:** the caller is responsible for closing the *file* argument, if
90 it was not ``None``, even when an exception is raised. This is best done
91 using a :keyword:`try` ... :keyword:`finally` statement.
Georg Brandl116aa622007-08-15 14:28:22 +000092
93
94.. function:: new_module(name)
95
96 Return a new empty module object called *name*. This object is *not* inserted
97 in ``sys.modules``.
98
99
100.. function:: lock_held()
101
102 Return ``True`` if the import lock is currently held, else ``False``. On
103 platforms without threads, always return ``False``.
104
105 On platforms with threads, a thread executing an import holds an internal lock
106 until the import is complete. This lock blocks other threads from doing an
107 import until the original import completes, which in turn prevents other threads
108 from seeing incomplete module objects constructed by the original thread while
109 in the process of completing its import (and the imports, if any, triggered by
110 that).
111
112
113.. function:: acquire_lock()
114
115 Acquires the interpreter's import lock for the current thread. This lock should
116 be used by import hooks to ensure thread-safety when importing modules. On
117 platforms without threads, this function does nothing.
118
Georg Brandl116aa622007-08-15 14:28:22 +0000119
120.. function:: release_lock()
121
122 Release the interpreter's import lock. On platforms without threads, this
123 function does nothing.
124
Georg Brandl116aa622007-08-15 14:28:22 +0000125
126The following constants with integer values, defined in this module, are used to
127indicate the search result of :func:`find_module`.
128
129
130.. data:: PY_SOURCE
131
132 The module was found as a source file.
133
134
135.. data:: PY_COMPILED
136
137 The module was found as a compiled code object file.
138
139
140.. data:: C_EXTENSION
141
142 The module was found as dynamically loadable shared library.
143
144
145.. data:: PY_RESOURCE
146
147 The module was found as a Mac OS 9 resource. This value can only be returned on
148 a Mac OS 9 or earlier Macintosh.
149
150
151.. data:: PKG_DIRECTORY
152
153 The module was found as a package directory.
154
155
156.. data:: C_BUILTIN
157
158 The module was found as a built-in module.
159
160
161.. data:: PY_FROZEN
162
163 The module was found as a frozen module (see :func:`init_frozen`).
164
165The following constant and functions are obsolete; their functionality is
166available through :func:`find_module` or :func:`load_module`. They are kept
167around for backward compatibility:
168
169
170.. data:: SEARCH_ERROR
171
172 Unused.
173
174
175.. function:: init_builtin(name)
176
177 Initialize the built-in module called *name* and return its module object along
178 with storing it in ``sys.modules``. If the module was already initialized, it
179 will be initialized *again*. Re-initialization involves the copying of the
180 built-in module's ``__dict__`` from the cached module over the module's entry in
181 ``sys.modules``. If there is no built-in module called *name*, ``None`` is
182 returned.
183
184
185.. function:: init_frozen(name)
186
187 Initialize the frozen module called *name* and return its module object. If
188 the module was already initialized, it will be initialized *again*. If there
189 is no frozen module called *name*, ``None`` is returned. (Frozen modules are
190 modules written in Python whose compiled byte-code object is incorporated
191 into a custom-built Python interpreter by Python's :program:`freeze`
192 utility. See :file:`Tools/freeze/` for now.)
193
194
195.. function:: is_builtin(name)
196
197 Return ``1`` if there is a built-in module called *name* which can be
198 initialized again. Return ``-1`` if there is a built-in module called *name*
199 which cannot be initialized again (see :func:`init_builtin`). Return ``0`` if
200 there is no built-in module called *name*.
201
202
203.. function:: is_frozen(name)
204
205 Return ``True`` if there is a frozen module (see :func:`init_frozen`) called
206 *name*, or ``False`` if there is no such module.
207
208
209.. function:: load_compiled(name, pathname, [file])
210
211 .. index:: pair: file; byte-code
212
213 Load and initialize a module implemented as a byte-compiled code file and return
214 its module object. If the module was already initialized, it will be
215 initialized *again*. The *name* argument is used to create or access a module
216 object. The *pathname* argument points to the byte-compiled code file. The
217 *file* argument is the byte-compiled code file, open for reading in binary mode,
218 from the beginning. It must currently be a real file object, not a user-defined
219 class emulating a file.
220
221
222.. function:: load_dynamic(name, pathname[, file])
223
224 Load and initialize a module implemented as a dynamically loadable shared
225 library and return its module object. If the module was already initialized, it
226 will be initialized *again*. Re-initialization involves copying the ``__dict__``
227 attribute of the cached instance of the module over the value used in the module
228 cached in ``sys.modules``. The *pathname* argument must point to the shared
229 library. The *name* argument is used to construct the name of the
230 initialization function: an external C function called ``initname()`` in the
231 shared library is called. The optional *file* argument is ignored. (Note:
232 using shared libraries is highly system dependent, and not all systems support
233 it.)
234
235
236.. function:: load_source(name, pathname[, file])
237
238 Load and initialize a module implemented as a Python source file and return its
239 module object. If the module was already initialized, it will be initialized
240 *again*. The *name* argument is used to create or access a module object. The
241 *pathname* argument points to the source file. The *file* argument is the
242 source file, open for reading as text, from the beginning. It must currently be
243 a real file object, not a user-defined class emulating a file. Note that if a
244 properly matching byte-compiled file (with suffix :file:`.pyc` or :file:`.pyo`)
245 exists, it will be used instead of parsing the given source file.
246
247
248.. class:: NullImporter(path_string)
249
250 The :class:`NullImporter` type is a :pep:`302` import hook that handles
251 non-directory path strings by failing to find any modules. Calling this type
252 with an existing directory or empty string raises :exc:`ImportError`.
253 Otherwise, a :class:`NullImporter` instance is returned.
254
255 Python adds instances of this type to ``sys.path_importer_cache`` for any path
256 entries that are not directories and are not handled by any other path hooks on
257 ``sys.path_hooks``. Instances have only one method:
258
259
260 .. method:: NullImporter.find_module(fullname [, path])
261
262 This method always returns ``None``, indicating that the requested module could
263 not be found.
264
Georg Brandl116aa622007-08-15 14:28:22 +0000265
266.. _examples-imp:
267
268Examples
269--------
270
271The following function emulates what was the standard import statement up to
272Python 1.4 (no hierarchical module names). (This *implementation* wouldn't work
273in that version, since :func:`find_module` has been extended and
274:func:`load_module` has been added in 1.4.) ::
275
276 import imp
277 import sys
278
279 def __import__(name, globals=None, locals=None, fromlist=None):
280 # Fast path: see if the module has already been imported.
281 try:
282 return sys.modules[name]
283 except KeyError:
284 pass
285
286 # If any of the following calls raises an exception,
287 # there's a problem we can't handle -- let the caller handle it.
288
289 fp, pathname, description = imp.find_module(name)
290
291 try:
292 return imp.load_module(name, fp, pathname, description)
293 finally:
294 # Since we may exit via an exception, close fp explicitly.
295 if fp:
296 fp.close()
297
298.. index:: module: knee
299
300A more complete example that implements hierarchical module names and includes a
301:func:`reload` function can be found in the module :mod:`knee`. The :mod:`knee`
302module can be found in :file:`Demo/imputil/` in the Python source distribution.
303