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
これまでのところ何も機能しておらず、エラーメッセージはいずれの場合も同じです。このエラーを修正するにはどうすればよいですか?
Sudo flask run
からSudo
をドロップすると、Flask finds $FLASK_APP
。ただし、エラーメッセージsocket.error: [Errno 13] Permission denied
が表示されます。 Flaskがスーパーユーザーとして実行すると$FLASK_APP
を見つけることができないため、これを回避する方法を参照してください。循環ロジックのようです。
Flaskを実行して、ポートを80から5000に変更し、Sudo
をflask run
でドロップしました。これは問題ありません。方法を見つける必要があります。本番環境ではポート80でアプリを実行します。
データベースを削除して再作成し、flask db init
への呼び出しを削除した後、db.create_all
を実行できました。
編集-4/27/17ポート80は実際にサーバーのファイアウォールによってブロックされていたため(ファイアウォールは制御不能)、開いているポートでアプリを実行すると問題が解決しました。
Initファイルでapp=App(__name__)
を呼び出すと仮定します。技術的にはrun.pyでも動作するはずですが、これを試してください。
export FLASK_APP=app/__init__.py; flask run
また、echo $FLASK_APP
後で、値実際にがflaskに直接アクセスし、bashプロファイルだけでなく、直接アクセスする環境変数に格納されているかどうかを確認します。
Windowsを使用している場合は、等号の周りにスペースがないことを確認してください。
set FLASK_APP=app.py
の代わりに
set FLASK_APP = app.py
それが私に起こったことです。スペースが原因で、「FLASK_APP環境変数が指定されていません」というエラーが表示されました。
Powershellでは、FLASK_APP
環境変数を次のように設定する必要があります。
$env:FLASK_APP = "webapp"
その後、hello_appフォルダ内でpython -m flask run
を実行できるはずです。つまり、PowerShellは環境変数を異なる方法で管理するため、標準のコマンドラインset FLASK_APP=webapp
は機能しません。