理論
- インポート時にはインポートされるモジュールのトップレベルのコードが実行される
- インポート元はスタックトレースの一つ外側のフレーム
- モジュールのパスはモジュールオブジェクトの
__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