Flaskの学習中に急にFlaskがimportできなくなる事象に陥りました。
なんとか解消したので、事象の状況と対処法を忘備録として残します。
ちなみに「動かして学ぶ!Pythonサーバレスアプリ開発入門」で学習の際の出来事です。
Flask正常動作時の環境
Flaskが正常に動作できていた時のPythonやFlaskのバージョン情報です。
$ python --version
Python 3.8.8
#Flaskのバージョン確認
$ pip list | grep Flask
Flask 1.1.2
Flask-Script 2.0.6
FlaskがimportNG動作時の環境
学習を進めていくと急にFlaskがimoortできなくなってしまいました。
おそらくですが、Flask-Loginライブラリをpipでインストールして以降だと思います。
importエラー時のメッセージはこちら
$ import flask
(省略)
from itsdangerous import json as _json
ImportError: cannot import name 'json' from 'itsdangerous'(/Users/username/.local/share/virtualenvs/application-bt4K9HFM/lib/python3.8/site-packages/itsdangerous/__init_
itsdangerousからjsonをインポートできない?・・・
itsdangerous???なんのライブラリ?といった感じです。
importがNGの時の各種バージョンです。
$ python --version
Python 3.8.8
変更無し
#Flaskのバージョン確認
$ pip list | grep Flask
Flask 1.1.2
Flask-Login 0.5.0
Flask-Script 2.0.6
Flask-Login 0.5.0をインストール
インポートNG解消方法
解消方法をgoogle検索で探し回りました。
似た様な事象が見つかったので、手当たり次第試してみたところ
下記の2手順を実施し解消することがわかりました。
- Flaskのバージョン変更(インポートNG解消手順①)
- MarkupSafeというライブラリのバージョン変更(インポートNG解消手順②)
インポートNG解消手順①Flask1.1.2→Flask1.1.4
まずはFlaskのバージョンUPを行います。
Flaskのバージョンを1.1.2から1.1.4へ変更しました。
$pip install Flask==1.1.4
#Flaskのバージョン確認
$pip list | grep Flas
Flask 1.1.2
Flask-Login 0.5.0
Flask-Script 2.0.6
※1.1.4以外でのバージョンでは未検証です。
この状態でもまだインポートはNGのままでした。
しかしエラーメッセージが変わってます.
$ import flask
(省略)
from markupsafe import soft_unicode
ImportError: cannot import name 'soft_unicode' from 'markupsafe' (/Users/username/.local/share/virtualenvs/application-bt4K9HFM/lib/python3.8/site-packages/markupsafe/__init__.py)
今度はmarkupsafeライブラリのsoft_uncodeがインポートできないのエラーになりました。
インポートNG解消手順②MarkupSafe2.1.0→MaarkupSafe2.0.1
Flaskのバージョン変更によりMarkupSafeに関するエラーとなりました。
MarkupSafe文字列をサニタイジングしてくれるライブラリの様です。
MarkupSafeの現在のバージョンは2.1.0でした。
#MarkupSafeのバージョン確認
$ pip list | gpre MarkupSafe
MarkupSafe 2.1.0
調査の結果バージョンを2.0.1へダウングレードすればよさそうです。
$ pip install MarkupSafe==2.0.1
#MarkupSafeのバージョン確認
$ pip list | gpre MarkupSafe
MarkupSafe 2.0.1
私の場合はこれでFlaskがインポートできる様になりました。
まとめ
以上がFlaskが急にインポートできなくなった時の対処法でした。
最後にNGの際のバージョンと解消後のバージョンです。
#FlaskがimportNGになった時のバージョン
$ pip list | grep Flask
Flask 1.1.2
Flask-Login 0.5.0
Flask-Script 2.0.6
$ pip list | grep MarkupSafe
MarkupSafe 2.1.0
#FlaskがimportOKになった時のバージョン
$ pip list | grep Flask
Flask 1.1.4
Flask-Login 0.5.0
Flask-Script 2.0.6
$ pip list | grep MarkupSafe
MarkupSafe 2.0.1
少しでも参考になれば幸いです。
コメント