Python-dotenv liest Schlüssel-Wert-Paare aus einer .env
Datei und kann sie als Umgebungsvariablen festlegen. Es hilft bei der Entwicklung von Anwendungen nach den 12-Faktoren-Prinzipien.
pip install python-dotenv
Wenn Ihre Anwendung ihre Konfiguration von Umgebungsvariablen übernimmt, wie etwa bei einer 12-Faktor-Anwendung, ist es nicht sehr praktisch, sie in der Entwicklung zu starten, da Sie diese Umgebungsvariablen selbst festlegen müssen.
Um Ihnen dabei zu helfen, können Sie Python-dotenv zu Ihrer Anwendung hinzufügen, damit diese die Konfiguration aus einer .env
Datei lädt, wenn sie vorhanden ist (z. B. in der Entwicklung), während sie gleichzeitig über die Umgebung konfigurierbar bleibt:
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.
Standardmäßig überschreibt load_dotenv
keine vorhandenen Umgebungsvariablen und sucht nach einer .env
Datei im selben Verzeichnis wie das Python-Skript oder sucht inkrementell weiter oben danach.
Um die Entwicklungsumgebung zu konfigurieren, fügen Sie eine .env
im Stammverzeichnis Ihres Projekts hinzu:
.
├── .env
└── foo.py
Die Syntax der von python-dotenv unterstützten .env
Dateien ähnelt der von Bash:
# Development settings
DOMAIN=example.org
ADMIN_EMAIL=admin@ ${DOMAIN}
ROOT_URL= ${DOMAIN} /app
Wenn Sie Variablen in Werten verwenden, stellen Sie sicher, dass diese von {
und }
umgeben sind, z. B. ${DOMAIN}
, da bloße Variablen wie $DOMAIN
nicht erweitert werden.
Sie möchten wahrscheinlich .env
zu Ihrem .gitignore
hinzufügen, insbesondere wenn es Geheimnisse wie ein Passwort enthält.
Weitere Informationen darüber, was Sie in eine .env
Datei schreiben können, finden Sie im Abschnitt „Dateiformat“ weiter unten.
Die Funktion dotenv_values
funktioniert mehr oder weniger auf die gleiche Weise wie load_dotenv
, außer dass sie die Umgebung nicht berührt, sondern lediglich ein dict
mit den aus der .env
Datei analysierten Werten zurückgibt.
from dotenv import dotenv_values
config = dotenv_values ( ".env" ) # config = {"USER": "foo", "EMAIL": "[email protected]"}
Dies ermöglicht insbesondere ein erweitertes Konfigurationsmanagement:
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
und dotenv_values
akzeptieren Streams über ihr stream
Argument. Somit ist es möglich, die Variablen aus anderen Quellen als dem Dateisystem (z. B. dem Netzwerk) zu laden.
from io import StringIO
from dotenv import load_dotenv
config = StringIO ( "USER=foo n [email protected]" )
load_dotenv ( stream = config )
Sie können dotenv in IPython verwenden. Standardmäßig wird find_dotenv
verwendet, um nach einer .env
Datei zu suchen:
% load_ext dotenv
% dotenv
Sie können auch einen Pfad angeben:
% dotenv relative / or / absolute / path / to / . env
Optionale Flags:
-o
um vorhandene Variablen zu überschreiben.-v
für mehr Ausführlichkeit. Außerdem ist eine CLI-Schnittstelle dotenv
enthalten, mit der Sie die .env
Datei bearbeiten können, ohne sie manuell öffnen zu müssen.
$ 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
Führen Sie dotenv --help
aus, um weitere Informationen zu den Optionen und Unterbefehlen zu erhalten.
Das Format ist nicht offiziell spezifiziert und wird im Laufe der Zeit immer noch verbessert. Davon abgesehen sollten .env
-Dateien größtenteils wie Bash-Dateien aussehen.
Schlüssel können ohne oder mit einfachen Anführungszeichen angegeben werden. Werte können ohne Anführungszeichen, in einfache oder doppelte Anführungszeichen gesetzt werden. Leerzeichen vor und nach Schlüsseln, Gleichheitszeichen und Werten werden ignoriert. Den Werten kann ein Kommentar folgen. Zeilen können mit der export
beginnen, was ihre Interpretation nicht beeinflusst.
Zulässige Escape-Sequenzen:
\
, '
\
, '
, "
, a
, b
, f
, n
, r
, t
, v
Werte in einfachen oder doppelten Anführungszeichen können sich über mehrere Zeilen erstrecken. Die folgenden Beispiele sind gleichwertig:
FOO= " first line
second line "
FOO= " first linensecond line "
Eine Variable kann keinen Wert haben:
FOO
Dies führt dazu, dass dotenv_values
diesen Variablennamen mit dem Wert None
(z. B. {"FOO": None}
verknüpft. load_dotenv
hingegen ignoriert solche Variablen einfach.
Dies sollte nicht mit FOO=
verwechselt werden. In diesem Fall wird die Variable mit der leeren Zeichenfolge verknüpft.
Python-dotenv kann Variablen mithilfe der POSIX-Variablenerweiterung interpolieren.
Bei load_dotenv(override=True)
oder dotenv_values()
ist der Wert einer Variablen der erste der in der folgenden Liste definierten Werte:
.env
Datei. Mit load_dotenv(override=False)
ist der Wert einer Variablen der erste der in der folgenden Liste definierten Werte:
.env
Datei.Dieses Projekt wird derzeit von Saurabh Kumar und Bertrand Bonnefoy-Claudet betreut und wäre ohne die Unterstützung dieser großartigen Menschen nicht möglich gewesen.