Python

インポート元モジュールのパスを取得する

理論

  • インポート時にはインポートされるモジュールのトップレベルのコードが実行される
  • インポート元はスタックトレースの一つ外側のフレーム
  • モジュールのパスはモジュールオブジェクトの __file__ 属性に入ってる

実装

main.py
import imported
imported.py
import inspect
stack = inspect.stack()
for s in stack[1:]:
    m = inspect.getmodule(s[0])
    if m:
        print(m.__file__)
        break

実行結果:

/some/where$ python -m main
/some/where/main.py