Importación dinámica del módulo de Python
dynamic-import (2)
Aquí hay algo que marqué hace un tiempo que cubre algo similar:
Está un poco más allá de lo que quieres, pero la idea básica está ahí.
Tengo un servidor remoto confiable que almacena muchos módulos personalizados de Python. Puedo buscarlos a través de HTTP (por ejemplo, usando urllib2.urlopen
) como texto / simple, pero no puedo guardar el código del módulo obtenido en el disco duro local. ¿Cómo puedo importar el código como un módulo de Python totalmente operativo, incluidas sus variables globales e importaciones?
Supongo que tengo que usar alguna combinación de las funciones del módulo exec
y imp
, pero no he podido hacerlo funcionar todavía.
Parece que esto debería hacer el truco: importar un módulo generado dinámicamente
>>> import imp >>> foo = imp.new_module("foo") >>> foo_code = """ ... class Foo: ... pass ... """ >>> exec foo_code in foo.__dict__ >>> foo.Foo.__module__ ''foo'' >>>
Además, como se sugiere en el artículo de ActiveState, es posible que desee agregar su nuevo módulo a sys.modules
:
>>> import sys >>> sys.modules["foo"] = foo >>> from foo import Foo <class ''Foo'' …> >>>