ImportError: cannot import name

Python 2.7

どツボった。

ImportError: cannot import name

■事象
以下のようなモジュール構造で、互いにモジュールを呼び合う場合に発生。

view\
    __init__.py
    form1.py
    form2.py

・form1.py

from veiw.fom2 import frm2
class frm1 ():
    ....

・form2.py

from veiw.fom1 import frm1
class frm2 ():
    ....


■原因
インポート時に、自分自身をインポートしているためにエラーとなっている(と思う)
ちなみに、組み込みモジュールと同じ名前のモジュールを作成した時も発生する。


■解決策
グローバルな箇所でインポートをするのではなく、クラス内でインポートする。
例えば、コンストラクタ内や画面を呼び出す直前のファンクション内など。
・form1.py

class frm1 ():
    def __init__(self):
        from veiw.fom2 import frm2
        self.fm = frm2()