Python: Alternativas al decapado de un módulo

Estoy trabajando en mi progtwig, GarlicSim , en el que un usuario crea una simulación, luego puede manipularlo como desee y luego puede guardarlo en un archivo.

Recientemente he intentado implementar la función de guardar. Lo natural que se me ocurrió es encurtir el objeto Project , que contiene toda la simulación.

El problema es que el objeto Project también incluye un módulo, que es el “paquete de simulación”, que es un paquete / módulo que contiene varios objetos críticos, en su mayoría funciones, que definen la simulación. Necesito guardarlos junto con la simulación, pero parece que es imposible encurtir un módulo, como presencié cuando intenté encurtir el objeto del Project y se produjo una excepción.

¿Cuál sería una buena manera de evitar esa limitación?

(También debería tener en cuenta que el paquete de simulación se importa dinámicamente en el progtwig).

Si el proyecto de alguna manera tiene una referencia a un módulo con cosas que necesita, suena como si quisiera refactorizar el uso de ese módulo en una clase dentro del módulo. Esto suele ser mejor de todos modos, porque el uso de un módulo para cosas huele a una gran grasa global. En mi experiencia, tal estructura de aplicación solo dará lugar a problemas.

(Por supuesto, la salida rápida es guardar el dictado del módulo en lugar del módulo mismo).

Si tiene el código original para los módulos del paquete de simulación, que presumo que se generan dinámicamente, sugeriría que se serialice y se reconstruyan los módulos cuando se carguen. Haría esto en los Project.__getstate__() y Project.__setstate__() .