django-dotenv icon indicating copy to clipboard operation
django-dotenv copied to clipboard

easily allow sourcing .env-file in bash

Open woutervh opened this issue 5 years ago • 1 comments

django-dotenv is a python-library, and used in python-code. Currently .env-files can only contain:

  • key/value-pairs
  • blank lines
  • comments

But sometimes, env-vars are also used by executables outside your python-code. E.g In a django-project with a postgresql-backend, I have these env-vars:

# postgres - used in django-settings + by postgres-executables (bin/pg_* )
PGHOSTADDR="127.0.0.1"
PGPORT="5432"
PGDATABASE="my-db"
PGUSER="my-dbadmin"
PGPASSWORD="SUPERSECRET"
PGOPTIONS=""

# used only by postgres-executables, 
# cfr. https://www.postgresql.org/docs/12.1/libpq-envars.html
PGDATA="..."
PGHOST="..."

I use following snippet to load all these key/value-pairs in my current bash-session to use the postgresql-commands: `

set -a && source .env && set +a `

You can find many oneliners to source a .env-file in bash, many using grep/sed/xargs/...

If we would allow setting bash-options in the .env-file:

set -o allexport
PGHOSTADDR="127.0.0.1"
...
set -o allexport

these option-lines can just be skipped in the python-parsing of the dotenv

this would simplify to:

 > source .env

just source the .env!

woutervh avatar Feb 19 '20 11:02 woutervh

this gives a syntax-warning right now:

elif not re.search(r'^\s*(?:#.*)?$', line):  # not comment or blank
            warnings.warn(
                "Line {0} doesn't match format".format(repr(line)),
                SyntaxWarning

woutervh avatar Feb 19 '20 12:02 woutervh