#概要
初めてpythonファイルを階層化したとき
import周りでハマった為、自分用に
#環境
- python 3.8.3
#フォルダ構成
AAA/
├AA.py
├BBB/
├BB.py
└CC.py
#ソース
AA.py
from BBB.BB import B
class A():
def __init__(self):
pass
BB.py
from CC import C
class B():
def __init__(self):
pass
CC.py
class C():
def __init__(self):
pass
#行動したこと
BB.pyとCC.pyを実装して、動作確認した後
階層化して外から呼び出すため、フォルダ:BBBとAA.pyを作成した
AA.pyを実行したら予想外のエラーが出た
#発生したエラー
AA.pyのerror
from CC import C
ModuleNotFoundError: No module named 'CC'
#敗因
BB.py単体では実行できたから、import文は間違ってないはず
なんで存在するのに呼び出されないのか
#解決
BB.pyのimport文にディレクトリ名を追加する
newBB.py
from BBB.CC import C
とても単純なことですが、実行できないことが意外だったため
自戒として心に刻みます
#本当の敗因
フォルダ名,ファイル名,クラス名をすべて同じ名前にして作ったため
解決と同じ手段を取ったのに解決できず、発見が遅れた
フォルダ名とファイル名が同じだと、importで自身を参照し、同じエラーが発生する
本当に戒めるべきなのは、ファイルの命名規則ですね