有时我希望在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.module s中进行快速dict查找,而不会执行其他操作。
你的代码和
是零——当我们点击那个代码时,如果
jinja2
还没有被导入,那么它就会被导入。如果已经发生了,执行将继续。其他的答案已经涵盖了实际的细节,但是如果您对延迟加载库感兴趣,请查看apipkg,它是
py
包(py.test
fame)的一部分。不需要缓存导入的模块;Python已经这样做了。
相关问题 更多 >
编程相关推荐