0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

階層化した Pythonのimportでハマった

Posted at

#概要
初めて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で自身を参照し、同じエラーが発生する
本当に戒めるべきなのは、ファイルの命名規則ですね

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?