W obliczu podobnego problemu stwierdziłem, że sys._current_frames () z modułu sys zawiera interesujące informacje, które mogą Ci pomóc, bez konieczności importowania inspekcji, przynajmniej w określonych przypadkach użycia.
>>> sys._current_frames()
{4052: <frame object at 0x03200C98>}
Następnie możesz „przesunąć się w górę” za pomocą f_back:
>>> f = 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__'
Jako nazwę pliku możesz również użyć f.f_back.f_code.co_filename, zgodnie z sugestią Marka Roddy'ego powyżej. Nie jestem pewien ograniczeń i zastrzeżeń tej metody (najprawdopodobniej wiele wątków będzie problemem), ale zamierzam ją zastosować w moim przypadku.
caller_name
nie może być__main__