1252 Stimmen

Wie setzt man Umgebungsvariablen in Python?

Ich muss einige Umgebungsvariablen im Python-Skript setzen und ich möchte, dass alle anderen Skripte, die von Python aus aufgerufen werden, die gesetzten Umgebungsvariablen sehen.

Wenn ich es tue,

os.environ["DEBUSSY"] = 1

beanstandet er, dass 1 muss eine Zeichenkette sein.

Ich möchte auch wissen, wie ich die Umgebungsvariablen in Python (im letzten Teil des Skripts) lesen kann, sobald ich sie gesetzt habe.

3 Stimmen

12voto

Laurent LAPORTE Punkte 20083

Wenn Sie mit Umgebungsvariablen spielen (Variablen hinzufügen/ändern/entfernen), ist es eine gute Praxis, den vorherigen Zustand bei Funktionsabschluss wiederherzustellen.

Möglicherweise benötigen Sie etwas wie die modified_environ Kontextmanager beschreiben in diesem Frage um die Umgebungsvariablen wiederherzustellen.

Klassische Verwendung:

with modified_environ(DEBUSSY="1"):
    call_my_function()

8voto

Sabuhi Shukurov Punkte 1290

Verwenden Sie setdefault um eine neue Variable zu setzen, wenn die Variable nicht in der Umgebung vorhanden ist.

Stellen Sie sicher, dass Sie die Umgebungsvariable als String und nicht als Int setzen. Andernfalls wird die TypeError .

import os

if not os.environ.get("DEBUSSY"):
    os.environ.setdefault("DEBUSSY","1")
else:
     os.environ["DEBUSSY"] = "1"

print(os.environ["DEBUSSY"])

8voto

sharhp Punkte 311

Eine gute Möglichkeit, benutzerdefinierte Umgebungsvariablen zu verwalten, besteht darin, sie alle in eine Textdatei zu schreiben und sie zur Laufzeit zu laden. Wir können dies mit der Methode python-dotenv Paket, das es uns ermöglicht, diese Variablen zu importieren. Dieses Paket kann installiert werden über

pip install python-dotenv

Standardmäßig sucht das Modul nach einer Datei namens .env im aktuellen Verzeichnis. Definieren Sie alle Ihre Variablen in dieser Datei, eine pro Zeile wie folgt:

DEBUSSY=1    
PATH_TO_EXECUTABLE=/home/user_name/project/run.sh

Und importieren Sie diese dann wie folgt in Ihre Umgebung:

from dotenv import load_dotenv
load_dotenv()

Sie können den Pfad zu der Datei, die die definierten Variablen enthält, als optionales Argument für load_dotenv . Anschließend kann auf diese Umgebungsvariablen ganz normal über den Befehl os Modul.

5voto

xjcl Punkte 8813

Ich habe diese kleine Kontext-Manager die Variablen nur für die Dauer eines eingerückten Blocks setzt:

import os
from contextlib import contextmanager

@contextmanager
def extended_env(new_env_vars):
    old_env = os.environ.copy()
    os.environ.update(new_env_vars)
    yield
    os.environ.clear()
    os.environ.update(old_env)

Anwendungsbeispiel (mit % für Windows und $ für Linux):

import subprocess

subprocess.run("echo $ENVTEST %ENVTEST%", shell=True)

with extended_env({"ENVTEST": "17"}):
    subprocess.run("echo $ENVTEST %ENVTEST%", shell=True)

subprocess.run("echo $ENVTEST %ENVTEST%", shell=True)

4voto

Romeo Kienzler Punkte 3135

Wie sieht es mit den folgenden Punkten aus?

os.environ["DEBUSSY"] = '1'
debussy = int(os.environ.get('DEBUSSY'))
print(type(debussy))

<Klasse 'int'>

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X