How it Works

PEP 302 defines a protocol for managing module imports. The protocol boils down to this:

  • There are two components: Finders and Loaders.

  • Finders are responsible for, unsurprisingly, finding modules.

  • If a Finder locates a module, i.e. knows which loader can load a module, it returns a ModuleSpec.

  • This ModuleSpec contains information on the module, such as filename and package, and identifies which Loader can execute the load.

  • The Loader is, as you’ve guessed it, responsible for loading modules into the environment.

  • It does so by first creating a module object, which the python machinery places into the sys.modules dictionary, then compiling and executing the module code.

  • An object that can both Find and Load is called an Importer.

inline-importer works by placing the source code of modules in a dictionary, keyed by module name. The finder searches this dictionary for an entry whose key matches the given module name. If found, it returns a ModuleSpec with itself listed as the Loader. Then, when python calles the Loader, inline-importer simply compiles the inlined source code to python bytecode and executes it as the normal python loader would.