Umgebungsvariablen für Python-Projekte

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.


#  .   . API_KEY = 'very_secret_password' 

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.


 #  . from config import API_KEY app = Flask(__name__) app.config['API_KEY'] = API_KEY 

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 Beispiel

Erstellen 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.


terminal_direnv

Source: https://habr.com/ru/post/de472674/


All Articles