Instantly share code, notes, and snippets.

Embed
What would you like to do?
Django manage.py file that loads environment variables from a .env file per Honcho/Foreman
#!/usr/bin/env python
import os
import sys
import re
def read_env():
"""Pulled from Honcho code with minor updates, reads local default
environment variables from a .env file located in the project root
directory.
"""
try:
with open('.env') as f:
content = f.read()
except IOError:
content = ''
for line in content.splitlines():
m1 = re.match(r'\A([A-Za-z_0-9]+)=(.*)\Z', line)
if m1:
key, val = m1.group(1), m1.group(2)
m2 = re.match(r"\A'(.*)'\Z", val)
if m2:
val = m2.group(1)
m3 = re.match(r'\A"(.*)"\Z', val)
if m3:
val = re.sub(r'\\(.)', r'\1', m3.group(1))
os.environ.setdefault(key, val)
if __name__ == "__main__":
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project_name.settings")
from django.core.management import execute_from_command_line
read_env()
execute_from_command_line(sys.argv)
#!/usr/bin/env python
import os
import sys
if __name__ == "__main__":
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project_name.settings")
from django.core.management import execute_from_command_line
execute_from_command_line(sys.argv)
@bennylope

This comment has been minimized.

Copy link
Owner

bennylope commented Jul 26, 2012

See the blog post for more explanation of how and why.

This will read default environment variables from your local .env file, e.g.

DATABASE_URL='postgres://dbuser:dbpass@localhost/mydb'
DEBUG=False
FACEBOOK_APP_ID='51821095311150'
FACEBOOK_API_SECRET='fj43dfe897f612cf3448ce34f0f6ad1a1'
@AndrewJHart

This comment has been minimized.

Copy link

AndrewJHart commented Dec 9, 2013

thx perfect for shell testing

@vegaro

This comment has been minimized.

Copy link

vegaro commented May 2, 2015

You saved my day, thanks!

@Flimm

This comment has been minimized.

Copy link

Flimm commented Oct 11, 2016

I like using this Python module: https://github.com/theskumar/python-dotenv

@kishorevbhosale

This comment has been minimized.

Copy link

kishorevbhosale commented Mar 3, 2017

nice one!

@ghost

This comment has been minimized.

Copy link

ghost commented Feb 1, 2018

Why not just return instead of setting content = '' ?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment