flaskで ImportError was raised. が消えない

flaskで ImportError was raisedが消えない Python

pythonの軽量フレームワークであるflaskで開発をしていたところ、ある時急にアプリが起動しなくなってしまいました。

コンソールには以下のメッセージが出るだけです。もう少し詳細にエラーの内容を教えてほしいですね。

1
Error: While importing 'app', an ImportError was raised.

appというのは私のアプリの名前です。

ImportErrorというからには、おそらくインポート関係の問題だと思い、各ファイルでimport漏れが無いか確認しましたが、発見できませんでした。

これはimportの循環エラー、無限ループが起きているのではないかと思ったところ、ビンゴでした。

Pythonでは、2つのモジュール(ファイル)でお互いにimportしあう形になっているとImportErrorになるようです。私の場合、modelとapiを同じモジュールに別クラスとして定義し、それを他のモジュールからもインポートするようになっていたのが問題でした。

hoge.py

1
2
3
4
5
6
7
8
9
from fuga import FugaModel
 
class HogeModel:
    def hoge_model -> str
        ...
 
class HogeApi:
    def hoge_api -> FugaModel
        ...

fuga.py

1
2
3
4
5
6
7
8
9
from hoge import HogeModel
 
class FugaModel:
    def fuga_model -> str
        ...
 
class FugaApi:
    def fuga_api -> HogeModel
        ...

modelとapiを別モジュール(ファイル)に分けたところ無事起動するようになりました。

hoge_model.py

1
2
3
class HogeModel:
    def hoge_model -> str
        ...

hoge_api.py

1
2
3
4
from fuga_model import FugaModel
 
class HogeApi:
    def hoge_api -> FugaModel

fuga_model.py

1
2
3
class FugaModel:
    def fuga_model -> str
        ...

fuga_api.py

1
2
3
4
5
from hoge_model import HogeModel
 
class FugaApi:
    def fuga_api -> HogeModel
        ...

タイトルとURLをコピーしました