同様の問題に直面して、sysモジュールのsys._current_frames()には、少なくとも特定のユースケースで、インスペクションをインポートする必要なしに役立つ興味深い情報が含まれていることがわかりました。
>>> 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__'
ファイル名には、上記のMark Roddyが提案したように、f.f_back.f_code.co_filenameを使用することもできます。この方法の制限と注意点はわかりません(複数のスレッドが問題になる可能性が高いです)が、私の場合は使用するつもりです。
caller_name
することはできません__main__