python 3.7でのみ動作検証しました。
以下のような構成があったとします。
sample/
├── sample1.py
├── main
│ ├── main1.py
│ └── src1
│ ├── main2.py
│ └── src2
│ ├── main3.py
│ └── main4.py
└── sub
└── sub1.py
main4.pyから
- main3.py
- main2.py
- main1.py
- sample1.py
- sub1.py
を呼び出したいときのメモです。
Pythonでimportを記述した場合、ライブラリを探すディレクトリが決まっています。しかしそこには、実行ファイルを含むディレクトリとそのサブディレクトリ群しか含まれません。
実行ファイル親階層にあるファイルをimportする場合、探索範囲に指定ディレクトリを追加する必要があります(パスが通っている状態にする)。
なお、 main4.py
以外のファイルでは、以下の内容で実装されてるとします。
def hello():
print(os.path.basename(__file__)) # 該当のファイル名を出力
とりあえず動く
main4.py
import main3
import sys
sys.path.append('../')
import main2
sys.path.append('../../')
import main1
sys.path.append('../../../')
import sample1
sys.path.append('../../../sub')
import sub1
main3.hello()
main2.hello()
main1.hello()
sample1.hello()
sub1.hello()
参考