Set Flask environment to development mode as default?

Question:

Every time I start up my flask app the environment variable is set to production. I want to have it set to development mode by default. Otherwise every time I start my app i have to run ..

export FLASK_ENV=development

How can I set environment’s default value as development in every startup?

EDIT: I am using flask in a virtual environment on a raspberry pi.

Asked By: crazyPen

||

Answers:

On Linux distro, like "Raspberry pi o.s", specify the environment on the terminal with the code below.
Unless you specify the environment, flask will assume production.

export FLASK_ENV=development
flask run

You can edit your main flask app file and add these lines:

if __name__ == '__main__':
    app.run(debug=True)

Using this method you have to run your flask app with Python interpreter like this => python app.py

Best Practice:

  1. Install python-dotenv package inside your working environment =>pip install python-dotenv

  2. Create a file named .env, put your environment variables in it, for your case it’s FLASK_ENV=development

  3. Then add this code to your config.py or some file that will get loaded before Flask main App

    from dotenv import load_dotenv
    dotenv_path = join(dirname(__file__), '.env')  # Path to .env file
    load_dotenv(dotenv_path)
    

Note that: If you are using flask command to run your application, you don’t need to do the third step, flask will find .env files in the project directory by itself.

Using this method, it will only set Environment variable for the project that you have added this code to.

Answered By: DarkSuniuM

Like the first answer and instead of adding the variable to a .env file which can be forgotten, do this instead.
This way, if you try to run the file in production, you’ll get an assertion error to remind you to actually use a dedicated web server (which "imports" the app). If you run locally, not only will you be reminded to use a .env file, but in the case no environment file is needed, the flask env is set to development to avoid any production conflicts.

import os

app = Flask(__name__)
IS_DEV = app.env == 'development'  # FLASK_ENV env. variable

# code

if __name__ == '__main__':
    # guaranteed to not be run on a production server
    assert os.path.exists('.env')  # for other environment variables...
    os.environ['FLASK_ENV'] = 'development'  # HARD CODE since default is production
    app.run(debug=True)
Answered By: Elijah
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.