Python-dotenv lit les paires clé-valeur à partir d'un fichier .env
et peut les définir comme variables d'environnement. Il aide au développement d’applications suivant les principes des 12 facteurs.
pip install python-dotenv
Si votre application prend sa configuration à partir de variables d'environnement, comme une application à 12 facteurs, la lancer en développement n'est pas très pratique car vous devez définir vous-même ces variables d'environnement.
Pour vous aider, vous pouvez ajouter Python-dotenv à votre application pour lui faire charger la configuration depuis un fichier .env
lorsqu'il est présent (en développement par exemple) tout en restant configurable via l'environnement :
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.
Par défaut, load_dotenv
ne remplace pas les variables d'environnement existantes et recherche un fichier .env
dans le même répertoire que le script Python ou le recherche progressivement plus haut.
Pour configurer l'environnement de développement, ajoutez un .env
dans le répertoire racine de votre projet :
.
├── .env
└── foo.py
La syntaxe des fichiers .env
supportés par python-dotenv est similaire à celle de Bash :
# Development settings
DOMAIN=example.org
ADMIN_EMAIL=admin@ ${DOMAIN}
ROOT_URL= ${DOMAIN} /app
Si vous utilisez des variables dans les valeurs, assurez-vous qu'elles sont entourées de {
et }
, comme ${DOMAIN}
, car les variables nues telles que $DOMAIN
ne sont pas développées.
Vous souhaiterez probablement ajouter .env
à votre .gitignore
, surtout s'il contient des secrets comme un mot de passe.
Consultez la section « Format de fichier » ci-dessous pour plus d'informations sur ce que vous pouvez écrire dans un fichier .env
.
La fonction dotenv_values
fonctionne plus ou moins de la même manière que load_dotenv
, sauf qu'elle ne touche pas l'environnement, elle renvoie simplement un dict
avec les valeurs analysées à partir du fichier .env
.
from dotenv import dotenv_values
config = dotenv_values ( ".env" ) # config = {"USER": "foo", "EMAIL": "[email protected]"}
Cela permet notamment une gestion avancée de la configuration :
import os
from dotenv import dotenv_values
config = {
** dotenv_values ( ".env.shared" ), # load shared development variables
** dotenv_values ( ".env.secret" ), # load sensitive variables
** os . environ , # override loaded values with environment variables
}
load_dotenv
et dotenv_values
acceptent les flux via leur argument stream
. Il est ainsi possible de charger les variables depuis d'autres sources que le système de fichiers (par exemple le réseau).
from io import StringIO
from dotenv import load_dotenv
config = StringIO ( "USER=foo n [email protected]" )
load_dotenv ( stream = config )
Vous pouvez utiliser dotenv dans IPython. Par défaut, il utilisera find_dotenv
pour rechercher un fichier .env
:
% load_ext dotenv
% dotenv
Vous pouvez également spécifier un chemin :
% dotenv relative / or / absolute / path / to / . env
Indicateurs facultatifs :
-o
pour remplacer les variables existantes.-v
pour une verbosité accrue. Une interface CLI dotenv
est également incluse, qui vous aide à manipuler le fichier .env
sans l'ouvrir manuellement.
$ pip install " python-dotenv[cli] "
$ dotenv set USER foo
$ dotenv set EMAIL [email protected]
$ dotenv list
USER=foo
[email protected]
$ dotenv list --format=json
{
" USER " : " foo " ,
" EMAIL " : " [email protected] "
}
$ dotenv run -- python foo.py
Exécutez dotenv --help
pour plus d'informations sur les options et les sous-commandes.
Le format n'est pas formellement précisé et s'améliore encore au fil du temps. Cela étant dit, les fichiers .env
devraient principalement ressembler à des fichiers Bash.
Les clés peuvent être sans guillemets ou entre guillemets simples. Les valeurs peuvent être sans guillemets, entre guillemets simples ou doubles. Les espaces avant et après les clés, les signes égal et les valeurs sont ignorés. Les valeurs peuvent être suivies d'un commentaire. Les lignes peuvent commencer par la directive export
, ce qui n'affecte pas leur interprétation.
Séquences d'échappement autorisées :
\
, '
\
, '
, "
, a
, b
, f
, n
, r
, t
, v
Il est possible que les valeurs entre guillemets simples ou doubles s'étendent sur plusieurs lignes. Les exemples suivants sont équivalents :
FOO= " first line
second line "
FOO= " first linensecond line "
Une variable ne peut avoir aucune valeur :
FOO
Il en résulte que dotenv_values
associe ce nom de variable à la valeur None
(par exemple {"FOO": None}
. load_dotenv
, en revanche, ignore simplement ces variables.
Cela ne doit pas être confondu avec FOO=
, auquel cas la variable est associée à la chaîne vide.
Python-dotenv peut interpoler des variables en utilisant l'expansion de variables POSIX.
Avec load_dotenv(override=True)
ou dotenv_values()
, la valeur d'une variable est la première des valeurs définies dans la liste suivante :
.env
. Avec load_dotenv(override=False)
, la valeur d'une variable est la première des valeurs définies dans la liste suivante :
.env
.Ce projet est actuellement maintenu par Saurabh Kumar et Bertrand Bonnefoy-Claudet et n'aurait pas été possible sans le soutien de ces personnes formidables.