Flaskを使用したアプリをDockerコンテナ上でデプロイしようとしたら出来なくなっていて苦労したのでその記録。ログにはImportErrorとなっていました。
Flaskデプロイ時に発生したエラー
過去に自分で作成したプロジェクトを流用してFlaskのアプリをDockerコンテナ上にデプロイしようとしたらできなくなっていました。
いわゆる「何もしてないのに壊れた」状態。。。
ログファイルには以下のようなエラーが記載されてました。
ImportError: cannot import name ‘url_quote’ from ‘werkzeug.urls’
直訳すると「‘werkzeug.urls’から’url_quote’をインポートできません」といった感じ。
一応それぞれについて調べたのでそれを以下に。
Werkzeug:シンプルなWSGIユーティリティライブラリ。WSGI準拠のアプリ開発をするために使用されるツールセットで、ウェブアプリケーションの様々な役割をサポートするもの。
url_quote:URLやURIの一部として特殊文字やスペースなどをエンコードする役割を持つ。
とにかく上記がインストールできないというエラーのようだが、どうやらWerzeugはFlaskに内包されているようです。
で、色々調べるとFlaskが新しくなったWerkzeug(ver3.0.0)に対応できていないからだそうです。
Why did Flask start failing with "ImportError: cannot import name 'url_quote' from 'werkzeug.urls'"?
Environment:
Python 3.10.11
Flask==2.2.2
I run my Flask backend code in docker container, with BASE Image:
FROM pytorch/pytorch:2.0.1-cuda11.7-cudnn8-runtime
B...
解決方法
バージョンを管理することで解決できました。
つまり正常に動作する古いバージョンを指定しました。
私は以下バージョンで実施し、正常に動作させることができました。
flask==2.2.2 Werkzeug==2.3.7
Flask側が対応するまでは意識的に管理する必要がありそうですね。
さいごに
上手くデプロイが出来ない原因が中々分からず時間がかかってしまいました。
やはりログを確認するのは大事ですね。
コメント