Confronté à un problème similaire, j'ai trouvé que sys._current_frames () du module sys contient des informations intéressantes qui peuvent vous aider, sans avoir besoin d'importer inspect, du moins dans des cas d'utilisation spécifiques.
>>> sys._current_frames()
{4052: <frame object at 0x03200C98>}
Vous pouvez ensuite "monter" en utilisant f_back:
>>> f = sys._current_frames().values()[0]
>>> # for python3: f = list(sys._current_frames().values())[0]
>>> print f.f_back.f_globals['__file__']
'/base/data/home/apps/apricot/1.6456165165151/caller.py'
>>> print f.f_back.f_globals['__name__']
'__main__'
Pour le nom de fichier, vous pouvez également utiliser f.f_back.f_code.co_filename, comme suggéré par Mark Roddy ci-dessus. Je ne suis pas sûr des limites et des mises en garde de cette méthode (plusieurs threads seront probablement un problème) mais j'ai l'intention de l'utiliser dans mon cas.
caller_name
ne peut donc pas l'être__main__