他のディレクトリで作ったモジュールのimportをさせたかったのですが、その方法がイマイチわからなくて詰まりました。
下の階層にあるなら"."でつなげばいいのですが、階層を遡る必要があると困ったので解決策を提示します。
今回は下層にあるとして進めます。階層が深くなると.(ドット)による記述が無駄に長くなるので、ある程度この記述で冗長な記述も避けられるかな??と思ったからです。
やりたかったこと
他のディレクトリ内のモジュールを引っ張ってくる。
階層構造は以下のようにしてみる
--- target
| |
| |--- sample.py
|
|--- main.py <-- 今ここ
で、直感的にやりたかったのがこれ
@ main.py
from target.sample import Sample
これはできるんだけど、もし
from target.target1.target2.sample import Sample
とかだったらすごく萎えるよね...
【 解決策 】Pathにセットしてあげる
sysとosを使って解決します!!
先ほどの階層構造に則ると、参照して欲しいディレクトリはtargetですね。
先に手順を話すと以下になります。
- sysとosのimport
- os.getcwd()でカレントディレクトリを取得(今回は同じ階層のディレクトリにつながっているため)
- sys.path.append()でPathを追加
この手順にのっとって書いてみます
# 手順1
import sys
import os
# 手順2 & 3
sys.path.append(os.getcwd() + 'target')
from sample import Sample
一応これで対応できました。
もし仮に4層、5層...と続いてもpathをセットしておけば、探してくれるので大丈夫です。
階層を遡るときは、その都度pathにいれるパスを変えてみてください!!