Umgebungsvariablen für Python-Projekte
Bei der Entwicklung einer Webanwendung oder eines Bots werden häufig geheime Informationen, verschiedene Token und Kennwörter (API-Schlüssel, Geheimnisse von Webformularen) behandelt. Das Hardcodieren dieser Informationen, geschweige denn das Speichern in einem öffentlich verfügbaren Versionskontrollsystem, ist eine sehr schlechte Idee.
Konfigurationsdateien
Der einfachste Weg, um dieses Problem zu lösen, besteht darin, eine separate Konfigurationsdatei mit allen vertraulichen Informationen zu erstellen und sie zu .gitignore
. Der Nachteil dieses Ansatzes ist, dass Sie in git auch die Konfigurationsdateivorlage behalten und nicht vergessen müssen, sie regelmäßig zu aktualisieren.
Umgebungsvariablen
Ein fortgeschrittenerer Ansatz ist die Verwendung von Umgebungsvariablen. Umgebungsvariablen sind benannte Variablen, die Textinformationen enthalten, die von ausgeführten Programmen verwendet werden können. Um beispielsweise eine Kolbenanwendung zu starten, müssen Sie zuerst den Namen unserer Anwendung in der Umgebungsvariablen FLASK_APP
:
$ export FLASK_APP=hello.py $ flask run * Running on http://127.0.0.1:5000/
Mithilfe von Umgebungsvariablen können Sie verschiedene Anwendungsparameter und geheime Schlüssel abrufen:
import os app.config['API_KEY'] = os.environ.get('API_KEY')
Python-dotenv-Bibliothek
Um Umgebungsvariablen nicht bei jedem Neustart des Terminals manuell festzulegen , können Sie das Paket python-dotenv verwenden . Sie können Umgebungsvariablen aus der .env
Datei in das Stammverzeichnis der Anwendung laden.
Installieren Sie das Paket:
pip install python-dotenv
Jetzt können Sie eine ENV-Datei mit allen Umgebungsvariablen erstellen, die Ihre Anwendung benötigt. Wichtig: .env
Sie die .env
Datei zu .gitignore
und speichern Sie sie nicht im Versionskontrollsystem.
import os from dotenv import load_dotenv dotenv_path = os.path.join(os.path.dirname(__file__), '.env') if os.path.exists(dotenv_path): load_dotenv(dotenv_path)
Diese .env-Datei kann für alle Konfigurationsvariablen verwendet werden, sie kann jedoch nicht für die Umgebungsvariablen FLASK_APP
und FLASK_DEBUG
werden, da sie bereits beim ersten Laden der Anwendung benötigt werden.
Direnv-Dienstprogramm
Umgebungsvariablen können beim Aufrufen des Projektordners automatisch geladen werden. Dies ist besonders praktisch, wenn Sie mit mehreren Projekten gleichzeitig arbeiten. Mit dem Dienstprogramm direnv können Sie dies tun. Direnv ist ein Variablenmanager für Terminalumgebungen, der bash, zsh, tcsh und andere Shells unterstützt. Ermöglicht das automatische Laden und Entladen von Umgebungsvariablen in Abhängigkeit von Ihrem aktuellen Verzeichnis. Auf diese Weise können Sie für jedes Projekt spezifische Umgebungsvariablen festlegen. Vor jeder Einladung wird das Vorhandensein der .envrc
Datei im aktuellen und übergeordneten Verzeichnis überprüft. Wenn die Datei vorhanden ist, wird sie in das Bash-Untermuster geladen, und alle exportierten Variablen werden von direnv erfasst und dann der Shell zur Verfügung gestellt.
Installieren Sie direnv
sudo apt-get install direnv
Als Nächstes müssen Sie Änderungen vornehmen, um unsere Shell zu konfigurieren. ~/.bashrc
für bash am Ende der ~/.bashrc
und starten Sie die Konsole neu:
eval "$(direnv hook bash)"
Direnv BeispielErstellen Sie einen neuen Ordner für das Projekt:
$ mkdir ~/my-project $ cd ~/my-project
Wir zeigen, dass die Umgebungsvariable FLASK_APP nicht geladen ist:
$ echo $FLASK_APP nope
Schreiben Sie die Umgebungsvariablen in die .envrc
Datei:
$ echo export FLASK_APP=hello.py > .envrc .envrc is not allowed
Um die Sicherheit zu gewährleisten, müssen Sie nach dem Erstellen oder Ändern der .envrc
Datei mit dem Befehl direnv allow Folgendes bestätigen:
$ direnv allow . direnv: reloading direnv: loading .envrc direnv export: +FLASK_APP
Wir zeigen, dass die Umgebungsvariable geladen ist:
$ echo $FLASK_APP hello.py
Wenn Sie den Projektordner verlassen, werden Umgebungsvariablen entladen
$ cd .. direnv: unloading
und wieder nicht gesetzt werden
$ echo $FLASK_APP nope
Arbeiten mit virtuellen Umgebungen in direnv
Mit direnv können Sie nicht nur Umgebungsvariablen laden, sondern auch mit einer virtuellen Umgebung für Python arbeiten.
In der virtuellen Umgebung können Sie verschiedene Versionen der Python-Interpreter- und Bibliothekspakete für einzelne Projekte verwenden. Es gibt verschiedene Möglichkeiten, eine virtuelle Umgebung für Python zu erstellen. Hier sehen wir uns das venv-Modul an. Weitere Optionen sind in der direnv-Dokumentation beschrieben .
Um mit venv automatisch eine virtuelle Umgebung zu erstellen und zu aktivieren, müssen Sie der ~/.config/direnv/direnvrc
den folgenden Code ~/.config/direnv/direnvrc
(siehe Dokumentation) .
Erstellen einer virtuellen Umgebung
Wenn Sie der .envrc
Datei eine Zeile .envrc
layout python-venv
Wenn Sie dann zum Ordner direnv wechseln, wird eine virtuelle Umgebung im Ordner direnv erstellt, z. B. .direnv/python-venv-3.7.3
.
Um eine virtuelle Umgebung mit einem anderen Pfad zu erstellen, z. B. im bekannteren venv-Ordner, müssen Sie die Variable VIRTUAL_ENV
:
export VIRTUAL_ENV=.venv
Auf die gleiche Weise können Sie eine bereits erstellte virtuelle Umgebung verbinden.
Arbeiten Sie mit verschiedenen Versionen von Python
Um eine andere als die Systemversion von Python zu installieren, müssen Sie den folgenden Befehl verwenden:
layout python-venv python3.6
Erstellen Sie eine Bash-Eingabeaufforderungszeichenfolge (PS1).
Im Gegensatz zur manuellen Aktivierung der virtuellen Umgebung wird in unserem Fall die Bash-Eingabeaufforderung (PS1) nicht geändert (normalerweise sieht es aus wie (venv) user@comp:~$
). ~/.bashrc
den folgenden Code hinzu, um die Aktivierungsanzeige der virtuellen Umgebung an die Konsole ~/.bashrc
:
show_virtual_env() { if [[ -n "$VIRTUAL_ENV" && -n "$DIRENV_DIR" ]]; then echo "($(basename $VIRTUAL_ENV))" fi } export -f show_virtual_env PS1='$(show_virtual_env)'$PS1
Beispiel für .envrc
Konfigurationsdatei für eine .envrc
Datei
So könnte die für die Entwicklung einer Kolbenanwendung konfigurierte .envrc
Datei aussehen:
export VIRTUAL_ENV=venv layout python-venv export FLASK_APP=app.py export FLASK_DEBUG=1
Auf diese Weise können Sie die virtuelle Umgebung automatisch aktivieren und Umgebungsvariablen beim Aufrufen des Projektordners laden.
