Flask says "did not provide the FLASK_APP environment variable"
Solution 1
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.
Solution 2
If you are on Windows, make sure there is no space around the equal :
set FLASK_APP=app.py
instead of
set FLASK_APP = app.py
That's what happened to me. I got the " You did not provide the FLASK_APP environment variable" error because of the spaces.
Solution 3
Assuming you call app=App(__name__)
in your init file. Try this, even though technically it should work with run.py as-well.
export FLASK_APP=app/__init__.py; flask run
Also try doing an echo $FLASK_APP
later to see if the value actually gets stored in the environment variable which flask directly accesses and not only the bash profile.
Solution 4
Under Powershell, you have to set the FLASK_APP
environment variable as follows:
$env:FLASK_APP = "webapp"
Then you should be able to run python -m flask run
inside the hello_app folder. In other words, PowerShell manages environment variables differently, so the standard command-line set FLASK_APP=webapp
won't work.
Related videos on Youtube
rosendin
Programmer (noun.) A machine that turns coffee into code.
Updated on July 09, 2022Comments
-
rosendin almost 2 years
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, butflask
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?
-
oxalorg over 7 yearsYour file structure and exact commands you used for exporting the environment would be helpful.
-
-
Juanjo Salvador about 6 yearsWhere
app/__init__.py
is the path to your app's main script, isn't it? You deserve a medal. -
RockAndRoleCoder about 4 yearsThanks, I was wondering what was wrong . That did the trick.