Flask says "did not provide the FLASK_APP environment variable"

70,038

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.

Share:
70,038

Related videos on Youtube

rosendin
Author by

rosendin

Programmer (noun.) A machine that turns coffee into code.

Updated on July 09, 2022

Comments

  • rosendin
    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, 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?

    • oxalorg
      oxalorg over 7 years
      Your file structure and exact commands you used for exporting the environment would be helpful.
  • Juanjo Salvador
    Juanjo Salvador about 6 years
    Where app/__init__.py is the path to your app's main script, isn't it? You deserve a medal.
  • RockAndRoleCoder
    RockAndRoleCoder about 4 years
    Thanks, I was wondering what was wrong . That did the trick.