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