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() # take environment variables
# 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` doesn't override existing environment variables
and looks for a `.env` file in same directory as python script or searches
for it incrementally higher up.
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
config = dotenv_values(".env") # config = {"USER": "foo", "EMAIL":
|