I'm trying to run a Flask application with flask run
but no matter what, I receive this error:
Error: Could not locate Flask application. You did not provide the FLASK_APP environment variable.
I'm using virtualenv in my project and I'm running the app on port 80 so I run the command as superuser. Ultimately, I just need to use the flask db init
command as described in Flask-Migrate's docs, but flask
needs to be able to find the app to do that. Here's what I've tried, with no success:
Exporting the FLASK_APP
environment variable, ensuring that it's in my bash profile, then activating 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.
Activating virtualenv, then exporting 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.
The above two with the full path, /Users/me/code/project/run.py
$ printenv FLASK_APP
/Users/me/code/project/run.py
Project Structure
myproject/
├──app/
| ├── __init__.py
| ├── models.py
| ├── templates/
| └── views.py
├── tests/
├── run.py
├── requirements.txt
└── config.py
So far nothing has worked and the error message is the same in each case. What can I do to fix this error?
When I drop sudo
from sudo flask run
, Flask finds $FLASK_APP
. However, I get the error message socket.error: [Errno 13] Permission denied
. I can't see a way around this, as Flask cannot find $FLASK_APP
when I run as superuser. Seems like circular logic.
I've managed to run Flask by changing the port from 80 to 5000 and dropping sudo
with flask run
. This is fine, I will have to find a way to run the app on port 80 in production though.
I was able to run flask db init
after dropping and recreating my database, and removing calls to db.create_all
.
Edit - 4/27/17 port 80 was indeed blocked by the firewall on my server (the firewall is beyond my control) so running the app on an open port resolved the issue.