Flaskが急に使えなくなった時の対処法

プログラミング

Flaskの学習中に急にFlaskがimportできなくなる事象に陥りました。

なんとか解消したので、事象の状況と対処法を忘備録として残します。

ちなみに「動かして学ぶ!Pythonサーバレスアプリ開発入門」で学習の際の出来事です。

Flask正常動作時の環境

Flaskが正常に動作できていた時のPythonやFlaskのバージョン情報です。

Python環境
$ python --version
Python 3.8.8
Flask環境
#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環境
$ python --version
Python 3.8.8

変更無し

Flask環境
#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

少しでも参考になれば幸いです。

コメント