¿Cómo implementar un enlace de importación que pueda modificar el código fuente sobre la marcha usando importlib?
Usando el módulo en desusoimp
, Puedo escribir un enlace de importación personalizado que modifique el código fuente de un módulo sobre la marcha, antes de la importación / ejecución por Python. Dado el código fuente como una cadena llamadasource
a continuación, el código esencial necesario para crear un módulo es el siguiente:
module = imp.new_module(name)
sys.modules[name] = module
exec(source, module.__dict__)
Ya queimp
está en desuso, me gustaría hacer algo similar conimportlib
. [EDITAR: hay otrosimp
métodos que deben reemplazarse para crear un enlace de importación personalizado, por lo que la respuesta que busco no es simplemente reemplazar el código anterior.]
Sin embargo, no he podido averiguar cómo hacer esto. losdocumentación importlib tiene unfunción para crear módulos a partir de "especificaciones" que, por lo que puedo decir, son objetos que incluyen sus propios cargadores sin una forma obvia de redefinirlos para poder crear un módulo a partir de una cadena.
He creado unejemplo mínimo para demostrar esto; vea el archivo readme para más detalles.