1 \section{Built-in Module
\sectcode{imp
}}
5 This module provides an interface to the mechanisms used to implement
6 the
\code{import
} statement. It defines the following constants and
9 \renewcommand{\indexsubitem}{(in module imp)
}
11 \begin{funcdesc
}{get_magic
}{}
12 Return the magic string value used to recognize byte-compiled code
13 files (``
\code{.pyc
} files'').
16 \begin{funcdesc
}{get_suffixes
}{}
17 Return a list of triples, each describing a particular type of file.
18 Each triple has the form
\code{(
\var{suffix
},
\var{mode
},
19 \var{type
})
}, where
\var{suffix
} is a string to be appended to the
20 module name to form the filename to search for,
\var{mode
} is the mode
21 string to pass to the built-in
\code{open
} function to open the file
22 (this can be
\code{'r'
} for text files or
\code{'rb'
} for binary
23 files), and
\var{type
} is the file type, which has one of the values
24 \code{PY_SOURCE
},
\code{PY_COMPILED
} or
\code{C_EXTENSION
}, defined
25 below. (System-dependent values may also be returned.)
28 \begin{funcdesc
}{find_module
}{name\,
\optional{path
}}
29 Try to find the module
\var{name
} on the search path
\var{path
}. The
30 default
\var{path
} is
\code{sys.path
}. The return value is a triple
31 \code{(
\var{file
},
\var{pathname
},
\var{description
})
} where
32 \var{file
} is an open file object positioned at the beginning,
33 \var{pathname
} is the pathname of the
34 file found, and
\var{description
} is a triple as contained in the list
35 returned by
\code{get_suffixes
} describing the kind of file found.
38 \begin{funcdesc
}{init_builtin
}{name
}
39 Initialize the built-in module called
\var{name
} and return its module
40 object. If the module was already initialized, it will be initialized
41 {\em again
}. A few modules cannot be initialized twice --- attempting
42 to initialize these again will raise an
\code{ImportError
} exception.
44 built-in module called
\var{name
},
\code{None
} is returned.
47 \begin{funcdesc
}{init_frozen
}{name
}
48 Initialize the frozen module called
\var{name
} and return its module
49 object. If the module was already initialized, it will be initialized
50 {\em again
}. If there is no frozen module called
\var{name
},
51 \code{None
} is returned. (Frozen modules are modules written in
52 Python whose compiled byte-code object is incorporated into a
53 custom-built Python interpreter by Python's
\code{freeze
} utility.
54 See
\code{Tools/freeze
} for now.)
57 \begin{funcdesc
}{is_builtin
}{name
}
58 Return
\code{1} if there is a built-in module called
\var{name
} which can be
59 initialized again. Return
\code{-
1} if there is a built-in module
60 called
\var{name
} which cannot be initialized again (see
61 \code{init_builtin
}). Return
\code{0} if there is no built-in module
65 \begin{funcdesc
}{is_frozen
}{name
}
66 Return
\code{1} if there is a frozen module (see
\code{init_frozen
})
67 called
\var{name
},
\code{0} if there is no such module.
70 \begin{funcdesc
}{load_compiled
}{name\, pathname\,
\optional{file
}}
71 Load and initialize a module implemented as a byte-compiled code file
72 and return its module object. If the module was already initialized,
73 it will be initialized
{\em again
}. The
\var{name
} argument is used
74 to create or access a module object. The
\var{pathname
} argument
75 points to the byte-compiled code file. The optional
\var{file
}
76 argument is the byte-compiled code file, open for reading in binary
77 mode, from the beginning --- if not given, the function opens
78 \var{pathname
}. It must currently be a real file object, not a
79 user-defined class emulating a file.
82 \begin{funcdesc
}{load_dynamic
}{name\, pathname\,
\optional{file
}}
83 Load and initialize a module implemented as a dynamically loadable
84 shared library and return its module object. If the module was
85 already initialized, it will be initialized
{\em again
}. Some modules
86 don't like that and may raise an exception. The
\var{pathname
}
87 argument must point to the shared library. The
\var{name
} argument is
88 used to construct the name of the initialization function: an external
89 C function called
\code{init
\var{name
}()
} in the shared library is
90 called. The optional
\var{file
} argment is ignored. (Note: using
91 shared libraries is highly system dependent, and not all systems
95 \begin{funcdesc
}{load_source
}{name\, pathname\,
\optional{file
}}
96 Load and initialize a module implemented as a Python source file and
97 return its module object. If the module was already initialized, it
98 will be initialized
{\em again
}. The
\var{name
} argument is used to
99 create or access a module object. The
\var{pathname
} argument points
100 to the source file. The optional
\var{file
} argument is the source
101 file, open for reading as text, from the beginning --- if not given,
102 the function opens
\var{pathname
}. It must currently be a real file
103 object, not a user-defined class emulating a file. Note that if a
104 properly matching byte-compiled file (with suffix
\code{.pyc
}) exists,
105 it will be used instead of parsing the given source file.
108 \begin{funcdesc
}{new_module
}{name
}
109 Return a new empty module object called
\var{name
}. This object is
110 {\em not
} inserted in
\code{sys.modules
}.
113 The following constants with integer values, defined in the module,
114 are used to indicate the search result of
\code{imp.find_module
}.
116 \begin{datadesc
}{SEARCH_ERROR
}
117 The module was not found.
120 \begin{datadesc
}{PY_SOURCE
}
121 The module was found as a source file.
124 \begin{datadesc
}{PY_COMPILED
}
125 The module was found as a compiled code object file.
128 \begin{datadesc
}{C_EXTENSION
}
129 The module was found as dynamically loadable shared library.
132 \subsection{Examples
}
133 The following function emulates the default import statement:
139 def __import__(name, globals=None, locals=None, fromlist=None):
140 # Fast path: see if the module has already been imported.
141 if sys.modules.has_key(name):
142 return sys.modules
[name
]
144 # If any of the following calls raises an exception,
145 # there's a problem we can't handle -- let the caller handle it.
147 # See if it's a built-in module.
148 m = imp.init_builtin(name)
152 # See if it's a frozen module.
153 m = imp.init_frozen(name)
157 # Search the default path (i.e. sys.path).
158 fp, pathname, (suffix, mode, type) = imp.find_module(name)
162 if type == imp.C_EXTENSION:
163 return imp.load_dynamic(name, pathname)
164 if type == imp.PY_SOURCE:
165 return imp.load_source(name, pathname, fp)
166 if type == imp.PY_COMPILED:
167 return imp.load_compiled(name, pathname, fp)
169 # Shouldn't get here at all.
170 raise ImportError, '
%s: unknown module type (%d)' % (name, type)
172 # Since we may exit via an exception, close fp explicitly.