有时我想在Python中加载延迟模块。通常因为我想保持运行时要求或启动时间低,并且将代码拆分为子模块会很麻烦。一个典型的用例和我目前首选的实现是:

jinja2 = None

class Handler(...):
    ...
    def render_with_jinja2(self, values, template_name):
        global jinja2
        if not jinja2:
            import jinja2
        env = jinja2.Environment(...)
        ...

我想知道:是否有一种规范/更好的方法来实现延迟模块加载?

最佳答案

您没有理由手动跟踪导入-VM维护了已导入模块的列表,任何随后尝试导入该模块的操作都会导致对sys.modules进行快速字典查找,而没有其他操作。

您的代码和

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

为零-当我们点击该代码时,如果尚未导入jinja2,则将其导入。如果已经存在,则继续执行。

10-06 13:54
查看更多