| single |
# python-dotenv
[![Build Status][build_status_badge]][build_status_link]
[![PyPI version][pypi_badge]][pypi_link]
python-dotenv reads key-value pairs from a `.env` file and can set them as
environment variables. It helps in the development of applications
following the
[12-factor] principles.
- [Getting Started]
- [Other Use Cases]
- [Load configuration without altering the environment]
- [Parse configuration as a stream]
- [Load .env files in IPython]
- [Command-line Interface]
- [File format]
- [Multiline values]
- [Variable expansion]
- [Related Projects]
- [Acknowledgements]
## Getting Started
```shell
pip install python-dotenv
```
If your application takes its configuration from environment variables,
like a
12-factor application, launching it in development is not very practical
because
you have to set those environment variables yourself.
To help you with that, you can add python-dotenv to your application to
make it
load the configuration from a `.env` file when it is present (e.g. in
development) while remaining configurable via the environment:
```python
from dotenv import load_dotenv
load_dotenv() # reads variables from a .env file and sets them in
os.environ
# Code of your application, which uses environment variables (e.g. from
`os.environ` or
# `os.getenv`) as if they came from the actual environment.
```
By default, `load_dotenv()` will:
- Look for a `.env` file in the same directory as the Python script (or
higher up the directory tree).
- Read each key-value pair and add it to `os.environ`.
- **Not override** existing environment variables (`override=False`). Pass
`override=True` to override existing variables.
To configure the development environment, add a `.env` in the root
directory of
your project:
```
.
├── .env
└── foo.py
```
The syntax of `.env` files supported by python-dotenv is similar to that of
Bash:
```bash
# Development settings
DOMAIN=example.org
ADMIN_EMAIL=admin@${DOMAIN}
ROOT_URL=${DOMAIN}/app
```
If you use variables in values, ensure they are surrounded with `{` and
`}`,
like `${DOMAIN}`, as bare variables such as `$DOMAIN` are not expanded.
You will probably want to add `.env` to your `.gitignore`, especially if it
contains secrets like a password.
See the section "[File format]" below for more information about what you
can write in a `.env` file.
## Other Use Cases
### Load configuration without altering the environment
The function `dotenv_values` works more or less the same way as
`load_dotenv`,
except it doesn't touch the environment, it just returns a `dict` with the
values parsed from the `.env` file.
```python
from dotenv import dotenv_values
|