Lo inspect.getmodule(f)
hace internamente, por inspect.py's sources, es esencialmente sys.modules.get(object.__module__)
- Yo no llamaría a usar ese código directamente "más conveniente", aunque (más allá de la parte "esencialmente", inspect
tiene mucha utilidad captura y corrección de casos de esquina).
¿Por qué no llamar directamente al inspect.getsourcefile(f)?
Editar: leer entre líneas parece que el PO está tratando de hacer algo como
python /foo/bar/baz/bla.py
y dentro bla.py
(que por lo tanto se está ejecutando como __main__
) determinar "lo from
o import
declaración podría una diferentes secuencias de comandos principales para importar esta función desde mi interior? ".
El problema es que la pregunta está mal planteada, ya que puede que no haya cualquier tales ruta utilizable para el propósito (nada garantiza ruta de la corriente de secuencia de comandos principal está en sys.path
cuando tan diferente script principal se ejecute más adelante), hay podría ser varios diferentes (por ejemplo, ambos /foo/bar
y /foo/bar/baz
podría estar en sys.path
y /foo/bar/baz/__init__.py
existen, en cuyo caso from baz.bla import f
y from bla import f
podría tanto el trabajo), y nada garantiza que algunos otra, sys.path
elemento anterior podría no "adelantarse" el intento de importación (por ejemplo, digamos /foo/bar/baz
está en sys.path
, pero antes de También hay /fee/fie/foo
y también existe un archivo /fee/fie/foo/bla.py
completamente no relacionado, etc., etc.
Sea cual sea el propósito de este tipo de intento de descubrimiento, sugiero la búsqueda de una arquitectura alternativa - por ejemplo, una donde from baz.bla import f
es realmente ejecutada (como dice el OP en el inicio de la pregunta), de manera que f.__module__
es correcta establecido en baz.bla
.
¿por qué necesita esto para empezar? – SilentGhost