I stopped maintaining this package as it has never been popular. If you want to use the functionality I recommend copying the small amount of code into your project.
Let Django use settings from an arbitrary Python file instead of an importable module.
As per James Pic's idea posted on the django-developers mailing list.
Python 3.7 to 3.11 supported.
Django 3.2 to 4.1 supported.
Want to work smarter and faster? Check out my book Boost Your Django DX which covers many ways to improve your development experience.
Install with
python -m pip install django-settings-file
.Edit your
manage.py
andwsgi.py
to swap out Django's default logic for settingDJANGO_SETTINGS_MODULE
to instead do:import django_settings_file django_settings_file.setup()
Add
os.environ.setdefault('DJANGO_SETTINGS_FILE', '/path/to/default.py')
before thesetup()
call, unless you can be sureDJANGO_SETTINGS_FILE
will always be defined in your environment. You might need to figure out the path relative to yourmanage.py
with someos.path
manipulation.Run it! If
DJANGO_SETTINGS_MODULE
is defined, it will raise aDjangoSettingsFileError
with a message about how onlyDJANGO_SETTINGS_FILE
is allowed now. IfDJANGO_SETTINGS_FILE
is not defined, it will also fail with aDjangoSettingsFileError
with a message about defining it. Otherwise Django should start with the settings!
django-settings-file
imports the contents of the specified file using the import machinery available on your Python
version (different logic for 2 and 3) and copies it contents into its own module, which Django sees as the settings
file defined via the traditional DJANGO_SETTINGS_MODULE
. Nothing about Django is really touched, it's just a
hacky module.
- If the Python file defined by
DJANGO_SETTINGS_FILE
tries to do any imports, the directory the file is in will not be onPYTHONPATH
, so the author of the settings file might get some surprises. - Additionally, you might experience other problems from loading a file whilst it's not on
PYTHONPATH
. - If you want your settings file to extend another one, it will probably find it easiest to
import
the base one from a location onPYTHONPATH
, otherwise it too will have to do use the same import 'hacks' to load the default settings. - File paths are not portable between operating systems, so you may need logic to support both Unix and Windows at once.
- File paths are not portable between
.py
and.pyc
files. In most cases this means a.pyc
file will not be used for settings since it can't be guaranteed to be there, slightly slowing down import time. DJANGO_SETTINGS_MODULE
andDJANGO_SETTINGS_FILE
can't both be used by the same project, since the module is required for the file-based logic. You might be able to allow them both with extra logic, pull requests accepted.¯\_(ツ)_/¯
- this is kind of unknown territory, this library has not been tested in any real project, just with the example project in the test folder.