web-dev-qa-db-ja.com

Flaskは、「FLASK_APP環境変数を提供しませんでした」と述べています

Flaskアプリケーションをflask runで実行しようとしていますが、何があっても、次のエラーが表示されます。

Error: Could not locate Flask application. You did not provide the FLASK_APP environment variable.

プロジェクトでvirtualenvを使用しており、ポート80でアプリを実行しているため、コマンドをスーパーユーザーとして実行します。最終的には、Flask-Migrateの docs で説明されているようにflask db initコマンドを使用するだけですが、flaskはそれを行うアプリを見つけることができる必要があります。これが私が試したものですが、成功しませんでした:

FLASK_APP環境変数をエクスポートし、それが私のbashプロファイルにあることを確認してから、virtualenvをアクティブにします

$ export FLASK_APP=run.py
$ printenv FLASK_APP
run.py
$ . env/bin/activate
(env) $ Sudo flask run
Error: Could not locate Flask application. You did not provide the     FLASK_APP environment variable.

virtualenvをアクティブにしてから、FLASK_APPをエクスポートします

$ . env/bin/activate
(env) $ export FLASK_APP=run.py
(env) $ printenv FLASK_APP
run.py
(env) Sudo flask run
Error: Could not locate Flask application. You did not provide the     FLASK_APP environment variable.

上記の2つとフルパス、/Users/me/code/project/run.py

$ printenv FLASK_APP
/Users/me/code/project/run.py

プロジェクト構造

myproject/
    ├──app/
    |  ├── __init__.py
    |  ├── models.py
    |  ├── templates/
    |  └── views.py
    ├── tests/
    ├── run.py
    ├── requirements.txt
    └── config.py

これまでのところ何も機能しておらず、エラーメッセージはいずれの場合も同じです。このエラーを修正するにはどうすればよいですか?

8
rosendin

Sudo flask runからSudoをドロップすると、Flask finds $FLASK_APP。ただし、エラーメッセージsocket.error: [Errno 13] Permission deniedが表示されます。 Flaskがスーパーユーザーとして実行すると$FLASK_APPを見つけることができないため、これを回避する方法を参照してください。循環ロジックのようです。

Flaskを実行して、ポートを80から5000に変更し、Sudoflask runでドロップしました。これは問題ありません。方法を見つける必要があります。本番環境ではポート80でアプリを実行します。

データベースを削除して再作成し、flask db initへの呼び出しを削除した後、db.create_allを実行できました。

編集-4/27/17ポート80は実際にサーバーのファイアウォールによってブロックされていたため(ファイアウォールは制御不能)、開いているポートでアプリを実行すると問題が解決しました。

3
rosendin

Initファイルでapp=App(__name__)を呼び出すと仮定します。技術的にはrun.pyでも動作するはずですが、これを試してください。

export FLASK_APP=app/__init__.py; flask run

また、echo $FLASK_APP後で、値実際にがflaskに直接アクセスし、bashプロファイルだけでなく、直接アクセスする環境変数に格納されているかどうかを確認します。

9
oxalorg

Windowsを使用している場合は、等号の周りにスペースがないことを確認してください。

set FLASK_APP=app.py

の代わりに

set FLASK_APP = app.py

それが私に起こったことです。スペースが原因で、「FLASK_APP環境変数が指定されていません」というエラーが表示されました。

0
u2gilles

Powershellでは、FLASK_APP環境変数を次のように設定する必要があります。

$env:FLASK_APP = "webapp"

その後、hello_appフォルダ内でpython -m flask runを実行できるはずです。つまり、PowerShellは環境変数を異なる方法で管理するため、標準のコマンドラインset FLASK_APP=webappは機能しません。