Best practice for lazy loading Python modules

There’s no reason for you to keep track of imports manually — the VM maintains a list of modules that have already been imported, and any subsequent attempts to import that module result in a quick dict lookup in sys.modules and nothing else.

The difference between your code and

def render_with_jinja2(self, values, template_name):
    import jinja2
    env = jinja2.Environment(...)

is zero — when we hit that code, if jinja2 hasn’t been imported, it is imported then. If it already has been, execution continues on.

Leave a Comment