Натрапивши на подібну проблему, я виявив, що sys._current_frames () з модуля sys містить цікаву інформацію, яка може допомогти вам, не потребуючи імпорту перевірки, принаймні у конкретних випадках використання.
>>> sys._current_frames()
{4052: <frame object at 0x03200C98>}
Потім можна "рухатись вгору" за допомогою 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__'
Для імені файлу ви також можете використовувати f.f_back.f_code.co_filename, як це запропонував Марк Родді вище. Я не впевнений у обмеженнях та застереженнях цього методу (кілька потоків, швидше за все, будуть проблемою), але я маю намір використовувати його у своєму випадку.
caller_name
не може бути__main__