Django Envtools
A Django package that enhances the environs library by adding management commands to simplify environment variable handling.
Management Commands
create_env_file: Creates a new.envfile with default values, help text, and initial value hooks for environment variables.diff_env_file: Displays differences between your.envfile and the environment variables in your Django settings.
Installation
Install via uv or pip:
uv add django-envtools
# or
pip install django-envtools
Usage
First, add django_envtools to your INSTALLED_APPS in settings.py:
INSTALLED_APPS = [
...
'django_envtools',
]
Then, update your settings to use the Env class to read environment variables. Django Envtools adds three keyword
arguments that environs doesn't have: help_text, initial_func, and initial.
help_text: Provides help text for each environment variable.initial_func: A callable or a string path to a callable that generates an initial value when runing thecreate_env_filemanagement command.initial: Set an initial value for environment variable when running thecreate_env_filemanagement command. Ifinitial_funcis provided, this value will be ignored.
For example, if you have the following in your settings.py:
from pathlib import Path
from django_envtools import Env
BASE_DIR = Path(__file__).resolve().parent.parent
# Initialize environs and load environment variables from .env file
env = Env()
env.read_env(BASE_DIR / ".env")
# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = env.str(
"SECRET_KEY",
initial_func="django.core.management.utils.get_random_secret_key",
help_text="Django's secret key, see https://docs.djangoproject.com/en/dev/ref/settings/#secret-key for more information",
)
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = env.bool("DEBUG", default=False, initial="on", help_text="Set to `on` to enable debugging")
ALLOWED_HOSTS = env.list(
"ALLOWED_HOSTS",
default=[],
help_text="List of allowed hosts (e.g., `127.0.0.1,example.com`), see https://docs.djangoproject.com/en/dev/ref/settings/#allowed-hosts for more information",
)
DATABASES = {
"default": env.dj_db_url(
"DATABASE_URL",
default="sqlite:///db.sqlite3",
help_text="Database URL, see https://github.com/jazzband/dj-database-url for more information",
)
}
# See https://github.com/migonzalvar/dj-email-url for more examples on how to set the EMAIL_URL
email = env.dj_email_url(
"EMAIL_URL",
default="smtp://skroob@planetspaceball.com:12345@smtp.planetspaceball.com:587/?ssl=True&_default_from_email=President%20Skroob%20%3Cskroob@planetspaceball.com%3E",
help_text="See https://github.com/migonzalvar/dj-email-url for more examples on how to set the EMAIL_URL",
)
DEFAULT_FROM_EMAIL = email["DEFAULT_FROM_EMAIL"]
EMAIL_HOST = email["EMAIL_HOST"]
EMAIL_PORT = email["EMAIL_PORT"]
EMAIL_HOST_PASSWORD = email["EMAIL_HOST_PASSWORD"]
EMAIL_HOST_USER = email["EMAIL_HOST_USER"]
EMAIL_USE_TLS = email["EMAIL_USE_TLS"]
After setting up, you can run the management command ./manage.py create_env_file to generate a .env file with the
following content:
# This is an initial .env file generated on 2024-10-31T19:21:56.174711+00:00. Any environment variable with a default
# can be safely removed or commented out. Any variable without a default must be set.
# Django's secret key, see https://docs.djangoproject.com/en/dev/ref/settings/#secret-key for more information
# type: str
SECRET_KEY=redacted-secret-key
# Set to `on` to enable debugging
# type: bool
# default: False
# DEBUG=
# List of allowed hosts (e.g., `127.0.0.1,example.com`), see https://docs.djangoproject.com/en/dev/ref/settings/#allowed-hosts for more information
# type: list
# default: []
# ALLOWED_HOSTS=
# Database URL, see https://github.com/jazzband/dj-database-url for more information
# type: dj_db_url
# default: sqlite:///db.sqlite3
# DATABASE_URL=
# See https://github.com/migonzalvar/dj-email-url for more examples on how to set the EMAIL_URL
# type: dj_email_url
# default: smtp://skroob@planetspaceball.com:12345@smtp.planetspaceball.com:587/?ssl=True&_default_from_email=President%20Skroob%20%3Cskroob@planetspaceball.com%3E
# EMAIL_URL=
As the project grows, you can run ./manage.py diff_env_file to identify differences between your .env file and
settings.py, helping you spot missing or orphaned environment variables.
An example output might look like:
Environment variables missing in .env file:
- ALLOWED_HOSTS
- DEBUG
Environment variables missing in .env file with default values:
- DATABASE_URL
Environment variables in .env file that are not defined in your Django settings:
- FOO
- BAR
Contributing
Contributions are welcome! Please open an issue or submit a pull request. If you have any questions, feel free to reach out.
License
This project is licensed under the MIT License.
Metadata
Release files for django-envtools 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| django_envtools-0.2.0.tar.gz | 33.0 kB | Without provenance | Details for django_envtools-0.2.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| django_envtools-0.2.0-py3-none-any.whl | Python 3 | none | any | Details for django_envtools-0.2.0-py3-none-any.whl |
Total release size: 40.8 kB
Release files / django_envtools-0.2.0.tar.gz
| Download URL | django_envtools-0.2.0.tar.gz |
|---|---|
| Size | 33.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
2ae85797f34856f8b0da004fc9c6ee6e53d262f2f04ab8482fc8d1c97e52a45c
|
|
BLAKE2b-256 checksum How to use checksums |
4f733c64364d62e692b13fd758ead7e83dc8a5f97db2364e5d20f571b3b561bc
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.7.12
|
Release files / django_envtools-0.2.0-py3-none-any.whl
| Download URL | django_envtools-0.2.0-py3-none-any.whl |
|---|---|
| Size | 7.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
b26d0834d00ec4cf8da810d62bb12750c28325b09ad1c570197ed33a7cddcebe
|
|
BLAKE2b-256 checksum How to use checksums |
9c529a1371b0eb470ad13860698486c01d830aefd948d47119bb7c2676d3fd21
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.7.12
|
Security for django-envtools 0.2.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.