¿Cómo puedo obtener una referencia a un módulo desde ese módulo? Además, ¿cómo puedo obtener una referencia al paquete que contiene ese módulo?
¿Cómo puedo obtener una referencia a un módulo desde ese módulo? Además, ¿cómo puedo obtener una referencia al paquete que contiene ese módulo?
Respuestas:
import sys
current_module = sys.modules[__name__]
Una técnica más, que no importa el módulo sys, y podría decirse, depende de su gusto, más simple:
current_module = __import__(__name__)
Tenga en cuenta que no hay importación. Python importa cada módulo solo una vez.
Si tiene una clase en ese módulo, la __module__
propiedad de la clase es el nombre del módulo de la clase. Por lo tanto, puede acceder al módulo a través de sys.modules[klass.__module__]
. Esto también funciona para funciones.
__module__
propiedad no es un módulo, sino una cadena; por lo tanto, un inspect.getabsfile(func.__module__)
error con " TypeError: 'os' no es un módulo, clase, método, función, rastreo, marco u objeto de código "; mientras inspect.getabsfile(sys.modules[o.__module__])
parece pasar.
Puede obtener el nombre del módulo actual usando __name__
La referencia del módulo se puede encontrar en el sys.modules
diccionario.
Ver la documentación de Python
Puede pasarlo desde afuera:
mymod.init(mymod)
No es ideal, pero funciona para mi caso de uso actual.