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 from .env.
# 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.
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":
"foo@example.org"}
```
|