Flaskがimportできない原因10選|ModuleNotFoundErrorの解決法【VSCode対応】

Flaskをチュートリアル通りにインストールして、さあ動かそう!……と思ったら、
「ModuleNotFoundError: No module named ‘flask’」と出て止まってしまった。
この経験、Flaskを始めた人のほとんどが一度は通る道です。
しかもやっかいなのが、「ちゃんとpipでインストールしたのにimportできない」というパターン。
VSCodeの設定や仮想環境の違い、Pythonのバージョンのズレなど、一見同じように見えるエラーでも原因が10通り以上あります。
この記事では、そんな「Flaskがimportできない」問題を体系的に整理し、
確認手順 → 原因10選 → 最後の手段の順に、どんな環境でも再現できる形で解説していきます。
PythonやFlaskが初めての方でも、手を動かしながらトラブルを解消できるように、コマンド例・画面操作・注意点をすべて丁寧に説明します。


まず確認すべきこと(最初にやる3つのチェック)
Flaskがimportできないとき、焦って再インストールを繰り返しても根本的な解決にはつながりません。
まずは「本当にFlaskがインストールされていて、Pythonが正しい環境を見ているか」を3つのステップで確認しましょう。
これをやるだけで、約半分のケースは原因が判明します。
最初のステップは、以下のコマンドで環境の状態を確認することです。
python -m pip show Flask
このコマンドで、もし「WARNING: Package(s) not found」と出た場合は、Flask自体がまだインストールされていません。
インストール済みであれば、バージョンやインストール先(Location)が表示されるはずです。
次に、Pythonがどの実行環境を見ているかを確認しましょう。
python -c "import flask, sys; print(flask.__version__, sys.executable)"
このコマンドでは、現在のPython実行ファイルの場所(sys.executable)と、Flaskのバージョンを同時に確認できます。
もしここでエラーが出る場合は、Flaskが別の環境に入っている可能性が高いです。
最後に、pipやsetuptoolsが古いままだと依存関係が壊れていることがあるため、以下で最新化しておきます。
python -m pip install -U pip setuptools wheel
ここまででエラーが出なければ、環境自体は整っているはずです。
それでもVSCodeで「Import ‘flask’ could not be resolved」と表示される場合、次章で扱う「インタープリタ設定」や「仮想環境の有効化」に原因がある可能性が高いです。
診断コードでimportできない原因をチェックしよう
「Flaskがインストールできているはずなのに、import flask で ModuleNotFoundError が出る」「原因10個のどれに当てはまるのか分からない」──そんなときに役立つ、現在のPython環境をまとめて調べてくれる診断コードを紹介します。
この診断コードを実行すると、この記事で紹介している
- Flaskがインストールされていない
- 仮想環境が有効化されていない
- VSCodeで別のPythonインタープリタを選択している
- ファイル名やフォルダ名が
flask.pyになっている - pipとpythonのバージョンがズレている
- 依存パッケージの破損や不整合
- システムに複数のPythonが同居している
- 本番環境でPATHが設定されていない/プロジェクト独自のパス設定が必要
といった原因候補のうち、どれが特に怪しそうかを絞り込むヒントが表示されます。
診断コード本体
import sys
import os
import subprocess
def run_cmd(cmd: str) -> str:
"""外部コマンドを実行して、標準出力を文字列で返す"""
try:
result = subprocess.run(
cmd,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT,
text=True,
shell=True,
)
return result.stdout.strip()
except Exception as e:
return f"[コマンド実行に失敗しました: {e}]"
def print_section(title: str) -> None:
print("\n" + "=" * 70)
print(title)
print("=" * 70)
def main() -> None:
# --------------------------------------------------------------
# 1. Python本体と仮想環境の情報(原因2,5,8あたりの手がかり)
# --------------------------------------------------------------
print_section("① 基本情報(Pythonと仮想環境)")
print(f"Python実行ファイル : {sys.executable}")
print(f"Pythonバージョン : {sys.version.split()[0]}")
is_venv = hasattr(sys, "base_prefix") and sys.base_prefix != sys.prefix
print(f"仮想環境の使用 : {'はい(venvなど)' if is_venv else 'いいえ(グローバル環境)'}")
print(f"sys.prefix : {sys.prefix}")
print(f"sys.base_prefix : {getattr(sys, 'base_prefix', 'なし')}")
# --------------------------------------------------------------
# 2. ファイル名のチェック(原因4: flask.pyとの衝突)
# --------------------------------------------------------------
print_section("② ファイル名のチェック(原因4: flask.pyとの衝突)")
filename = os.path.basename(__file__)
print(f"この診断ファイル名 : {filename}")
current_dir = os.path.dirname(os.path.abspath(__file__))
current_dir_files = os.listdir(current_dir)
if filename.lower() == "flask.py":
print("NG: ファイル名が 'flask.py' になっています。別の名前に変更してください。")
print(" (例)flask_diag.py / app.py など")
else:
print("OK: このファイル名は 'flask.py' ではありません。")
if "flask.py" in current_dir_files and filename.lower() != "flask.py":
print("注意: 同じフォルダ内に 'flask.py' という別ファイルが存在します。")
print(" 本物のFlaskライブラリではなく、そのファイルを読み込んでいる可能性があります。")
# --------------------------------------------------------------
# 3. import flask のテスト(原因1,2,3,5,7,8,9,10)
# --------------------------------------------------------------
print_section("③ import flask のテスト")
imported_flask = False
dependency_issue = False
try:
import flask # noqa: F401
imported_flask = True
print("OK: import flask に成功しました。")
try:
# バージョンとモジュールの場所も表示
print(f"flask のバージョン : {getattr(flask, '__version__', '不明')}")
print(f"flask モジュールの場所 : {getattr(flask, '__file__', '不明')}")
except Exception:
pass
try:
from flask import Flask # noqa: F401
print("OK: from flask import Flask も成功しました。")
except Exception as e:
print("注意: from flask import Flask で例外が発生しました。")
print(f"エラーの種類 : {type(e).__name__}")
print(f"メッセージ : {e}")
print("→ コード側の書き方や依存パッケージを確認してください。")
except Exception as e:
print("NG: import flask に失敗しました。")
print(f"エラーの種類 : {type(e).__name__}")
print(f"メッセージ : {e}")
msg_lower = str(e).lower()
for dep in ("werkzeug", "jinja2", "itsdangerous", "click"):
if dep in msg_lower:
dependency_issue = True
break
print("→ 原因1 / 原因2 / 原因3 / 原因5 / 原因7 / 原因8 / 原因9 / 原因10")
print(" のいずれかに該当している可能性があります。")
# --------------------------------------------------------------
# 4. Flaskのインストール状況(原因1,2,5,7,8,10)
# --------------------------------------------------------------
print_section("④ Flaskのインストール状況(python -m pip / pip)")
# 現在のPythonが見ている環境でのFlask
show_current = run_cmd(f'"{sys.executable}" -m pip show Flask')
print('[python -m pip show Flask] の結果:')
print(show_current or "(出力なし)")
# 単純な pip コマンドでのFlask
show_pip = run_cmd("pip show Flask")
print("\n[pip show Flask] の結果:")
print(show_pip or "(出力なし)")
installed_current = "Name: Flask" in show_current
installed_pip = "Name: Flask" in show_pip
if not installed_current and not installed_pip:
print("\n→ 原因1: どの環境にもFlaskがインストールされていない可能性が高いです。")
elif not installed_current and installed_pip:
if is_venv:
print("\n→ 原因2 / 原因5 / 原因8 / 原因10 が疑われます。")
print(" ・この仮想環境とは別の環境にFlaskが入っている")
print(" ・pipコマンドが別のPythonを参照している")
print(" などの可能性があります。")
else:
print("\n→ 原因5 / 原因8:")
print(" 'pip' コマンドが、今このPythonとは別のPython環境に紐づいている可能性があります。")
print(" 必ず 'python -m pip install Flask' の形式でインストールしてみてください。")
elif installed_current and not imported_flask:
print("\n→ Flask自体は現在の環境にインストールされていますが、importに失敗しています。")
print(" 依存パッケージの不整合(原因7)や、環境の破損が疑われます。")
else:
print("\n→ 現在のPython環境にはFlaskがインストールされており、importも成功しています。")
# --------------------------------------------------------------
# 5. pipのバージョンと対応Python(原因5,7,8,9)
# --------------------------------------------------------------
print_section("⑤ pipのバージョンと対応Python(原因5,7,8,9)")
pip_ver_current = run_cmd(f'"{sys.executable}" -m pip --version')
print(f'[{sys.executable} -m pip --version] の結果:')
print(pip_ver_current or "(出力なし)")
pip_ver_cmd = run_cmd("pip --version")
print("\n[pip --version] の結果:")
print(pip_ver_cmd or "(出力なし)")
print(
"\n上の2つの出力に出てくる Python のバージョンやパスを見比べてください。\n"
"・違っている場合 → 原因5(pipとpythonのズレ)や原因8(複数Pythonの混在)が疑われます。\n"
)
# --------------------------------------------------------------
# 6. Python / pip の場所と sys.path(原因3,8,9,10)
# --------------------------------------------------------------
print_section("⑥ Python / pip の場所と import パス(原因3,8,9,10)")
if os.name == "nt":
py_paths = run_cmd("where python")
pip_paths = run_cmd("where pip")
else:
py_paths = run_cmd("which -a python python3")
pip_paths = run_cmd("which -a pip pip3")
print("[python の場所候補]")
print(py_paths or "(見つかりませんでした)")
print("\n[pip の場所候補]")
print(pip_paths or "(見つかりませんでした)")
print(
"\n上記に複数のパスが表示されている場合、複数のPythonが同居している可能性があります。\n"
"VSCode右下のPythonインタープリタのパスと、ここに表示されているパスが一致しているか確認してください。\n"
)
print("【sys.path(Pythonがモジュールを探すパスの一覧)】")
for p in sys.path:
print(" -", p)
print(
"\n本番環境(Apache / mod_wsgi など)で使っている場合は、\n"
"ここに仮想環境の site-packages パスが含まれているかどうかを確認してください。\n"
"含まれていない場合は、原因9(本番環境でPATHが設定されていない)や\n"
"原因10(プロジェクト独自のパス設定不足)の可能性があります。\n"
)
# --------------------------------------------------------------
# 7. 推定される原因のまとめ
# --------------------------------------------------------------
print_section("⑦ 推定される原因のまとめ")
if filename.lower() == "flask.py" or "flask.py" in current_dir_files:
print("- 原因4: ファイル名やフォルダ名が 'flask.py' になっている可能性が高いです。")
if not installed_current and not installed_pip:
print("- 原因1: FlaskがどのPython環境にもインストールされていない可能性が高いです。")
if not installed_current and installed_pip:
if is_venv:
print("- 原因2/5/8/10: 仮想環境とグローバル環境のインストール先がずれている可能性があります。")
else:
print("- 原因5/8: pipとpythonの参照先がずれている可能性があります。")
if installed_current and not imported_flask:
print("- 原因7: 依存パッケージの破損や不整合が疑われます。")
if dependency_issue:
print("- 原因7: エラーメッセージに依存パッケージ名が含まれているため、依存関係の不整合の可能性が高いです。")
print(
"\n※ Flaskのクラス名の大文字・小文字ミス(原因6)は、"
"この診断コードからは直接検出できません。\n"
" ご自身のアプリコード側で `from flask import Flask` と書けているか、"
"`flask` になっていないかを確認してください。\n"
)
print("詳しい直し方は、この記事の『Flaskがimportできない原因10選』の各項目を参照してください。")
if __name__ == "__main__":
main()診断結果の読み方
- セクション「⑦ 推定される原因のまとめ」に、この記事で紹介している原因1〜原因10のうち、特に怪しいものが箇条書きで表示されます。
- そこで表示された原因番号を目安に、記事中の該当セクション
(「Flaskがインストールされていない」「仮想環境が有効化されていない」「pipとpythonのバージョンがズレている」など)を開き、書かれている手順どおりに修正していけばOKです。
この診断コードを使うことで、「どこから手を付ければいいのか分からない」という状態を避け、原因のあたりを付けてから詳しい解説に進むことができるようになります。
あたりが付いたら、下記の各原因の対策部へ進んでください。

Flaskがimportできない原因10選とその対処法
Flaskのimportエラーは、一見するとどれも同じ「ModuleNotFoundError」に見えます。
しかし実際には、環境のズレ・ファイル名の衝突・依存パッケージの不整合など、発生源はさまざまです。
ここでは、よくある10の原因をケース別に整理して紹介します。
それぞれの項目では、再現例と解決コマンドも紹介しますので、順番に試していくことで確実に原因を特定できます。
Flaskがインストールされていない
一番単純ですが、最も多いパターンです。
Pythonを複数入れている環境では、「別のPython環境に入っている」こともよくあります。
python -m pip install Flask
このとき注意すべきは、必ずpython -m pip形式で実行することです。
単にpip install Flaskと打つと、別のPython環境に入ってしまうことがあります。
仮想環境が有効化されていない
VSCodeで作成した仮想環境(.venvなど)が有効になっていないと、Flaskをインストールしても認識されません。
仮想環境を作成したフォルダで以下を実行してください(Windowsの場合)。
.venv\Scripts\activate
コマンド実行後、ターミナルの左側に「(.venv)」と表示されていればOKです。
VSCodeで別のPythonインタープリタを選択している
VSCodeは複数のPython環境を自動検出しますが、正しい仮想環境を選択していないとimportエラーになります。
確認手順は以下の通りです。
Ctrl + Shift + P(MacはCmd + Shift + P)を押す- 「Python: Select Interpreter」と入力して選択
.venvと表示されたインタープリタを選ぶ
これでVSCodeが正しい仮想環境を参照するようになります。
ファイル名やフォルダ名が flask.py になっている
初心者がよくやってしまうミスです。
自分の作ったファイルが flask.py という名前だと、Pythonが本物のFlaskライブラリではなく、自分のファイルをimportしようとしてしまいます。
ファイル名を app.py などに変更し、同じディレクトリ内の __pycache__ フォルダを削除してください。
rm -r __pycache__
これでPythonのキャッシュもクリアされます。
pipとpythonのバージョンがズレている
複数バージョンのPythonをインストールしている場合、pipが古いバージョンのPythonを参照していることがあります。
次のコマンドで、pipがどのPythonに対応しているか確認してみましょう。
where pip # Windows which pip # Mac / Linux
ズレている場合は、python -m pip install Flask で再インストールすると安全です。
Flaskのクラス名で大文字・小文字を間違えている
こちらも初学者が見落としがちなポイントです。
Flaskではクラス名が大文字のFで始まるため、以下のように正しく書く必要があります。
from flask import Flask app = Flask(__name__)
もし from flask import flask と書いている場合、正しいクラスがimportされずエラーになります。
依存パッケージの破損や不整合
Flaskは Werkzeug, Jinja2, itsdangerous, Click など複数のパッケージに依存しています。
これらのどれかが壊れていると、Flask自体のimportが失敗することがあります。
最新版に更新するには、次のコマンドを実行してください。
pip install -U "Flask[async]"
これにより依存関係も一括でアップデートされます。
システムに複数のPythonが同居している
WindowsやAnaconda環境では、Python 3.9・3.11など複数のバージョンが共存していることがよくあります。
その結果、pipが別の環境にFlaskを入れてしまい、importできないという現象が起きます。
現在使っているPythonを特定するには以下のコマンドを使います。
python -c "import sys; print(sys.executable)"
ここに表示されるパスと、Flaskが入っているパス(pip show FlaskのLocation欄)が一致していれば問題ありません。
本番環境(ApacheやWSGI)でPATHが設定されていない
Flaskを本番環境で動かすとき、Apacheやmod_wsgiなどのサーバー側で仮想環境を正しく紐付けないと、import flask に失敗します。
wsgi.py内で以下のように明示的にvenvパスを追加することで解決できます。
import sys sys.path.insert(0, '/var/www/yourapp/.venv/lib/python3.11/site-packages')
プロジェクト独自のパス設定が必要
特定の構成では、Flaskをサブディレクトリに分けて配置している場合があります。
その際、Pythonがそのディレクトリを認識していないとimportできません。
一時的にモジュールパスを追加するには以下のようにします。
import sys
sys.path.append('./src')ただし、この方法はあくまで応急処置です。
正しい構成としては、__init__.pyを用意してパッケージ化するのがおすすめです。

Flaskの動作確認テンプレート(Hello, Flask!)
ここまでの手順でFlaskを正しくインストールし、環境も整ったはずです。
次に行うのは、「本当にFlaskが動くかどうか」を最小構成で確認するステップです。
複雑なコードは必要ありません。
まずは “Hello, Flask!”と表示されるだけの超シンプルなアプリ を作って動かしてみましょう。
最小構成のFlaskアプリを作成する
以下のように、app.py というファイルを作成します。
この中に次のコードをコピペして保存してください。
from flask import Flask
# Flaskアプリケーションのインスタンスを作成
app = Flask(__name__)
# ルートURL('/')にアクセスしたときに実行される関数
@app.route('/')
def hello():
return "Hello, Flask!"
# アプリを起動(デバッグモード有効)
if __name__ == "__main__":
app.run(debug=True)このコードは、Flaskの最も基本的な構造です。
Flask(__name__) でアプリのインスタンスを作り、@app.route('/') でルートURLを設定しています。
ブラウザで http://127.0.0.1:5000/ にアクセスすると、「Hello, Flask!」が表示されれば成功です。
うまく動かないときのチェックポイント
アプリを起動してもブラウザで何も表示されない、またはターミナルにエラーが出る場合は、次の点を確認してみてください。
- ファイル名が
flask.pyではなくapp.pyになっているか - すでに別のプロセスがポート5000を使用していないか
- 仮想環境が有効化されているか(ターミナル先頭に
(.venv)と表示されているか) - FlaskをインストールしたPythonと、実行しているPythonが同じか
これらを一つずつ確認すれば、ほとんどのケースで正常に起動できるはずです。
動作確認ができたら次のステップへ
「Hello, Flask!」が表示されたら、あなたの開発環境は正しく整っています。
これでようやくFlaskの第一関門を突破しました。
次は、それでも動かない場合の最終手段として、環境リセットや再構築のチェックリストを紹介していきます。


それでも直らないときの最終チェックリスト
ここまでの手順をすべて試しても、まだ「Flaskがimportできない」「Import ‘flask’ could not be resolved」と表示される場合。
そんなときは、環境そのものが壊れているか、VSCodeが古い設定を参照している可能性があります。
焦らず、以下のチェックリストを順番に実行してください。
これらは「環境をまっさらに戻す」ための最終ステップです。少し時間はかかりますが、確実に動く状態を取り戻せます。
仮想環境を削除して再作成する
仮想環境が壊れていると、どんなに正しい設定をしてもFlaskが読み込まれません。
最も手っ取り早い方法は、仮想環境を一度削除して作り直すことです。
まず、プロジェクトフォルダ内にある .venv(または env)ディレクトリを削除します。
その後、以下のコマンドで新しい仮想環境を作成します。
python -m venv .venv
続いて、仮想環境を有効化してFlaskを再インストールしましょう。
.venv\Scripts\activate python -m pip install Flask
これで、ほぼすべての依存関係がリセットされます。
pipキャッシュをクリアする
インストール済みのパッケージキャッシュが壊れていることもあります。
pipは高速化のためにダウンロード済みファイルをキャッシュしていますが、古いキャッシュが悪影響を及ぼすケースがあります。
以下のコマンドでキャッシュを削除しましょう。
pip cache purge
その後、再度Flaskをインストールします。
python -m pip install Flask
キャッシュ削除後はクリーンな状態から再構築されるため、「過去に入れたバージョンが悪さしていた」パターンもこれで解消します。
VSCodeのPython設定をリセットする
VSCodeが古いインタープリタや壊れた拡張機能を参照していると、「Flaskが見つからない」と誤検知されることがあります。
次の手順で設定をリセットしてみましょう。
- VSCode左下の歯車アイコンから「設定」を開く
- 検索バーに「interpreter」と入力
- 「Python: Default Interpreter Path」を空欄に戻す
- VSCodeを再起動
また、拡張機能タブから「Python」と「Pylance」を一度無効化 → 再有効化してみるのも効果的です。
これで再スキャンが走り、環境を正しく再認識してくれます。
Python自体を再インストールする
それでも解決しない場合は、Python自体のインストールに問題がある可能性があります。
特にWindowsで古いバージョンを上書きインストールしている場合、パス設定やレジストリが混乱しているケースが多いです。
次の手順でクリーンインストールを行いましょう。
- 公式サイト(https://www.python.org/downloads/)から最新版をダウンロード
- 「Add Python to PATH」にチェックを入れてインストール
- その後、再度Flaskをインストール
python -m pip install Flask
インストール直後は python --version と pip --version が一致しているかも確認してください。
システムレベルのパスを確認する
最後に、Flaskをどのパスから読み込んでいるかを明確にしましょう。
以下のコマンドを実行します。
python -c "import flask, sys; print(flask.__file__); print(sys.executable)"
これで「Flaskライブラリの場所」と「実行中のPythonの場所」が同時に表示されます。
この2つが異なるパスを指している場合、環境の整合性が取れていません。
正しいPythonで再インストールすれば解決します。
まとめ:焦らずリセットすれば必ず直る
Flaskのimportエラーは、実は環境のどこかがズレているだけのことがほとんどです。
焦って何度も同じpipコマンドを打つより、「環境を整える→再インストール→起動確認」という順番を守ることが何より大切です。
もしここまでやっても動かない場合は、再現コードとエラーメッセージを1箇所にまとめ、公式の Flask Discussions で質問してみるのもおすすめです。
世界中のFlaskユーザーが同じようなトラブルを経験しており、的確なアドバイスをもらえるはずです。

まとめ|これからFlaskを学ぶあなたへ
ここまで、「Flaskがimportできない」問題をあらゆる角度から解説してきました。
最初はどこから手をつけていいか分からなかった方も、今なら自分の環境がどう動いているのかをだいぶ理解できたはずです。
Flaskはとてもシンプルなフレームワークですが、そのぶんPythonの基礎知識や環境管理の理解が欠かせません。
今回の記事を通して、「pip」「venv」「インタープリタ」などの概念が少しでもクリアになっていれば、それは確実な前進です。
Flaskを使えるようになると、「小さなWebアプリを自分で作って公開する」という世界が一気に近づきます。
ちょっとしたアイデアを形にできる力は、Pythonを学ぶ大きな魅力のひとつです。
これから先は、トラブルが起きてもこの記事を思い出してください。
“環境・ファイル名・依存関係・パス”を見直すだけで、必ず道は開けます。
次は、あなた自身のアプリを作る番です。
「Hello, Flask!」から「My First Web App!」へ。
その一歩を、今日から始めましょう。

よくある質問(Flask importエラーFAQ)
Flaskをインストールしてもimportできないという悩みは、Python学習者の中でも特に多いトピックです。
ここでは、実際によく検索される質問をもとに、3つの代表的な疑問とその解決法を紹介します。
記事本文を読んだあとで再確認する形でも、きっと役立つはずです。
Q1. 「ModuleNotFoundError: No module named ‘flask’」が出るのはなぜ?
このエラーは、PythonがFlaskを見つけられていない状態を意味します。
主な原因は次の2つです。
- Flaskがインストールされていない
- 別のPython環境にインストールされている
まずは以下のコマンドで確認してみましょう。
python -m pip show Flask
結果に「Name: Flask」と表示されればOKです。
表示されない場合は、以下のように再インストールします。
python -m pip install Flask
ポイントは、python -m pip形式を使うこと。
これにより、今使っているPython環境に確実にFlaskが入ります。
Q2. VSCodeで「Import ‘flask’ could not be resolved」と表示される
これはVSCodeのPylance拡張機能が、Flaskをインストールした環境と異なるPythonを参照しているときに出る警告です。
Flaskが存在しても、VSCodeが正しい環境を見ていないためにエラーが出ます。
次の手順で解決できます。
Ctrl + Shift + P(MacはCmd + Shift + P)を押す- 「Python: Select Interpreter」と入力して選択
.venvなど仮想環境のインタープリタを選ぶ
再度 app.py を開くと、エラーが消えているはずです。
もし直らない場合は、VSCodeを再起動してからもう一度確認してみましょう。
Q3. Flaskをインストールしたのに「flaskコマンドが見つからない」と出る
これは、環境パスにFlaskの実行ファイルが含まれていないときに起こります。
多くの場合、仮想環境が有効化されていないのが原因です。
まずは仮想環境を有効化し、再びFlaskをインストールしてください。
これで flask コマンドが認識されるようになります。
もしそれでもエラーが出る場合は、python -m flask --app app run という形でも起動可能です。

