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.

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.

AndrewJHart commented Dec 9, 2013

thx perfect for shell testing

@vegaro

This comment has been minimized.

vegaro commented May 2, 2015

You saved my day, thanks!

@Flimm

This comment has been minimized.

Flimm commented Oct 11, 2016

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

@kishorevbhosale

This comment has been minimized.

kishorevbhosale commented Mar 3, 2017

nice one!

@ghost

This comment has been minimized.

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