standard proposal online enhancement python coding-style

proposal - Práctica recomendada para la carga lenta de módulos de Python



python package naming conventions (3)

Las otras respuestas han cubierto los detalles reales, pero si está interesado en una biblioteca de carga apipkg , consulte apipkg que es parte del paquete py ( py.test fame).

De vez en cuando quiero cargar módulos en pereza en Python. Por lo general, porque quiero mantener bajos los requisitos de tiempo de ejecución o tiempos de inicio y dividir el código en submódulos sería engorroso. Un caso de uso típico y mi implementación actualmente preferida es esta:

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

Me pregunto: ¿existe alguna forma canónica / mejor para implementar la carga de módulos perezosos?


No hay motivo para que realice un seguimiento de las importaciones de forma manual: la VM mantiene una lista de módulos que ya se han importado, y cualquier intento posterior de importar ese módulo da como resultado una búsqueda rápida de dict en sys.modules y nada más.

La diferencia entre tu código y

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

es cero - cuando jinja2 ese código, si jinja2 no se ha importado, entonces se importa. Si ya lo ha sido, la ejecución continúa.


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

No es necesario almacenar en caché el módulo importado; Python ya lo hace.