Module Loading
Module-loading operations rely on attributes of the built-in sys
module (covered in The sys Module). The module-loading process described in this section is carried out by built-in function _ _import_ _
. Your code can call _ _import_ _
directly, with the module name string as an argument. _ _import_ _
returns the module object or raises ImportError
if the import fails.
To import a module named M
, _ _import_ _
first checks dictionary sys.modules
, using string M
as the key. When key M
is in the dictionary, _ _import_ _
returns the corresponding value as the requested module object. Otherwise, _ _import_ _
binds sys.modules[
M
]
to a new empty module object with a _ _name_ _
of M
, then looks for the right way to initialize (load) the module, as covered in Searching the Filesystem for a Module.
Thanks to this mechanism, the relatively slow loading operation takes place only the first time a module is imported in a given run of the program. When a module is imported again, the module is not reloaded, since _ _import_ _
rapidly finds and returns the module’s entry in sys.modules
. Thus, all imports of a given module after the first one are very fast: they’re just dictionary lookups. (To force a reload, see The reload Function.)
Built-in Modules
When a module is loaded, _ _import_ _
first checks whether the module is built-in. Built-in modules are listed in tuple sys.builtin_module_names
, but rebinding that tuple does not affect module loading. When Python loads a built-in module, ...
Get Python in a Nutshell, 2nd Edition now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.