Pythonのインポート時に相対パスをさかのぼる
書きたいこと
巷でよく見るPythonインポート関連の記事では、相対パスに関する記載がある時に、カレントディレクトリとかその上のディレクトリくらいまではどうやって読み込めばいいかが書かれているが、それ以上になるとあまりない。困ったので書いておく。
もうちょっと詳しく
よく見るちゃんとしたまとめ記事では、相対パスについて
from . import some_module
とか
from ..shared_module import some_func
とか書かれている。これは
\
├ shared_module.py -> some_func を含む
└ (カレントディレクトリ)
├ (カレントファイル)
└ some_module.py
みたいな構造を想定している。ところで、
\
├ top_module.py -> some_func を含む
└ second/
├ second_module.py
└ third/
├ third_module.py
└ fourth/
├ fourth_module.py
└ (カレントディレクトリ)
├ (カレントファイル)
└ some_module.py
みたいになったらどうしたらいいの? というのが知りたかったこと。
結論
こんな感じで読める。一つ深くなるごとに `.` が一つ増える。
from . import some_module
from .. import fourth_module
from ... import thrid_module
from .... import second_module
from .....top_module import some_func