Setting and retrieving environmental variables in flask applications
Question:
I want to build a very simple REST api using python3/flask.
Say for example I want to set my SECRET_KEY
required by flask
as env var.
What is the recommended way of going about it?
I am aware of python-dotenv
package that allows (or should I say requires?) the .flaskenv
file with env vars set as key-value pairs in the form of
SECRET_KEY="my_secret_key"
DB_NAME="mydatabase"
etc.
Then (I assume) I can create a settings.py
file such as
import os
SECRET_KEY = os.getenv('SECRET_KEY`)
and then perform an import settings
on my flask files and so on.
My main question is how can this be adapted in a containerized environment where there will not be such an .flaskenv
file but the respective variables will be available as runtime env vars in the container itself (say via its orchestrator)
Will the above form of settings.py
be able to retrieve env vars in the absence of .flaskenv
?
Answers:
python-dotenv
actually has nothing to do with Flask. It is for your .env
file to be translated into actual env variables. So if you’re going to have actual env variables without it, your os.getenv
should still work.
Sidenote: You can also use os.environ
:
os.environ.get("SECRET")
Set your environment variable in the interpreter:
export SECRET_KEY=123
Call the variable with environ.get()
:
from os import environ
from flask import Flask
app = Flask(__name__)
app.config['SECRET_KEY'] = environ.get('SECRET_KEY')
I want to build a very simple REST api using python3/flask.
Say for example I want to set my SECRET_KEY
required by flask
as env var.
What is the recommended way of going about it?
I am aware of python-dotenv
package that allows (or should I say requires?) the .flaskenv
file with env vars set as key-value pairs in the form of
SECRET_KEY="my_secret_key"
DB_NAME="mydatabase"
etc.
Then (I assume) I can create a settings.py
file such as
import os
SECRET_KEY = os.getenv('SECRET_KEY`)
and then perform an import settings
on my flask files and so on.
My main question is how can this be adapted in a containerized environment where there will not be such an .flaskenv
file but the respective variables will be available as runtime env vars in the container itself (say via its orchestrator)
Will the above form of settings.py
be able to retrieve env vars in the absence of .flaskenv
?
python-dotenv
actually has nothing to do with Flask. It is for your .env
file to be translated into actual env variables. So if you’re going to have actual env variables without it, your os.getenv
should still work.
Sidenote: You can also use os.environ
:
os.environ.get("SECRET")
Set your environment variable in the interpreter:
export SECRET_KEY=123
Call the variable with environ.get()
:
from os import environ
from flask import Flask
app = Flask(__name__)
app.config['SECRET_KEY'] = environ.get('SECRET_KEY')