Recuperar objeto de módulo de marco de pila

Dado un objeto de marco, necesito obtener el objeto de módulo correspondiente. En otras palabras, implementar callers_module para que esto funcione:

import sys
from some_other_module import callers_module
assert sys.modules[__name__] is callers_module()

(Eso sería equivalente porque puedo generar un seguimiento de pila en la función para este caso de prueba. Las importaciones están ahí simplemente para hacer que el ejemplo sea completo y verificable, y evitar que callers_module tome el atajo de usar __name__, ya que está en un módulo diferente .)

He intentado esto:

import inspect
def callers_module():
  return inspect.currentframe().f_back

Que obtiene un objeto de marco, en el que f_code me dará un objeto de código, pero no puedo averiguar cómo obtener el módulo correspondiente o su nombre (para usar con sys.modules). Si pudiera obtener objetos de función, esos tienen un atributo __module__ (y también tienen objetos de código), pero eso no está presente en el marco. De hecho, no todos los objetos de código pertenecen a objetos de función, como el código para mi caso de prueba (con aserción, arriba). Lo mismo puede decirse de los objetos de marco / código que no tienen un módulo, pero muchos de ellos sí lo tienen, y en mi caso lo harán, por lo que no es necesario manejarlo; sin embargo, una simple Ninguna o excepción está bien también en ese caso.

Se siente como si me estuviera perdiendo algo simple. ¿Qué hay que hacer para que esto funcione?

Respuestas a la pregunta(2)

Su respuesta a la pregunta