Last active
August 17, 2023 10:44
-
-
Save bennylope/2999704 to your computer and use it in GitHub Desktop.
Django manage.py file that loads environment variables from a .env file per Honcho/Foreman
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Copyright the authors of Honcho and/or Ben Lopatin | |
Licensed for reuse, modification, and distribution under the terms of the MIT license |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Very useful, thanks.
I use honcho in some of my deployment scripts, so in that case I don't want the local .env file mucking things up.
I added a check before the "try" block that simply returns from read_env() if one of my environment variables is already set.
Obviously replace YOUR_VARIABLE with, well, your variable!