Wie greife ich auf Umgebungsvariablenwerte zu?

2118

Ich habe eine Umgebungsvariable festgelegt, auf die ich in meiner Python-Anwendung zugreifen möchte. Wie bekomme ich seinen Wert?

Amit Yadav
quelle

Antworten:

3168

Auf Umgebungsvariablen wird über os.environ zugegriffen

import os
print(os.environ['HOME'])

Oder Sie können eine Liste aller Umgebungsvariablen anzeigen, indem Sie:

os.environ

Wie manchmal müssen Sie möglicherweise eine vollständige Liste sehen!

# using get will return `None` if a key is not present rather than raise a `KeyError`
print(os.environ.get('KEY_THAT_MIGHT_EXIST'))

# os.getenv is equivalent, and can also give a default value instead of `None`
print(os.getenv('KEY_THAT_MIGHT_EXIST', default_value))

Die Python-Standardinstallation unter Windows ist C:\Python. Wenn Sie dies herausfinden möchten, während Sie Python ausführen, können Sie Folgendes tun:

import sys
print(sys.prefix)
Stange
quelle
1
Hallo Rod, danke für deine effektive Antwort bezüglich 'Standardinstallation'; effektiv im Hinblick darauf, es schnell zu verstehen, anstatt durch die Links zu gehen. Das habe ich wirklich geschätzt :) aber zu meiner (1) Frage schauen Sie sich bitte den folgenden Befehl an und geben das folgende Snippet aus: >>> import os >>> print os.environ ['PYTHONPATH'] Traceback (letzter Aufruf zuletzt): File " <console> ", Zeile 1, in der <module> -Datei" C: \ Python25 \ lib \ os.py ", Zeile 435, in getitem return self.data [key.upper ()] KeyError: 'PYTHONPATH' >>> print os.environ.get ('PYTHONPATH') Keine >>> // PLZ wird fortgesetzt ... //
Amit Yadav
In einem ersten Weg löst das Skript eine Ausnahme aus, während das zweite keine gibt. Gibt es eine Möglichkeit, einen sinnvollen Wert zu erzielen, oder mache ich das falsch ??? Amit.
Amit Yadav
7
os.environ ist ein Wörterbuch. Wenn Sie versuchen, auf einen Schlüssel zuzugreifen, der nicht im Wörterbuch vorhanden ist, wird ein KeyError ausgelöst. Die get-Methode gibt einfach None zurück, wenn der Schlüssel nicht vorhanden ist. Haben Sie PYTHONPATH eingestellt? Können Sie es mit einer Variablen wie PATH versuchen, die garantiert existiert? Gibt es einen aussagekräftigen Wert zurück?
Rod
2
PYTHONPATH wird verwendet, um Python (sys.path) von außerhalb von Python einen neuen Suchpfad hinzuzufügen. Werfen
Rod
11
.get()kann auch eine Standardeinstellung erhalten.
Gringo Suave
243

Um zu überprüfen, ob der Schlüssel vorhanden ist (gibt Trueoder zurück False)

'HOME' in os.environ

Sie können auch get()beim Drucken des Schlüssels verwenden. nützlich, wenn Sie einen Standard verwenden möchten.

print(os.environ.get('HOME', '/home/username/'))

Wo /home/username/ist die Standardeinstellung?

lgriffiths
quelle
3
Welches ist besser "HOME" in os.environoder os.environ.get('HOME')?
Endolith
11
@endolith Sie machen verschiedene Dinge. Der erste gibt True oder False zurück, während der zweite einen Wert zurückgibt, möglicherweise None.
Trenton
1
@endolith, die richtige Frage woud "HOME" in os.environvs os.environ.get('HOME') is None. Wie Sie zuerst sehen können, ist die Arbeit weitaus lesbarer und komfortabler.
Konstantin Sekeresh
59

Die ursprüngliche Frage (erster Teil) lautete: "Wie werden Umgebungsvariablen in Python überprüft?"

So überprüfen Sie, ob $ FOO festgelegt ist:

try:  
   os.environ["FOO"]
except KeyError: 
   print "Please set the environment variable FOO"
   sys.exit(1)
Scott C Wilson
quelle
66
"FOO" in os.environ
ealfonso
4
Versuch kann schneller sein. Der Fall von env vars ist wahrscheinlich am besten für 'try': stackoverflow.com/a/1835844/187769
RandomInsano
13
@RandomInsano schneller = / = besser. Dieser Code sieht weniger lesbar aus als ein "if 'FOO' not in os.environ: ..."Block
Dangercrow
44

Sie können mit auf die Umgebungsvariablen zugreifen

import os
print os.environ

Versuchen Sie, den Inhalt der Umgebungsvariablen PYTHONPATH oder PYTHONHOME anzuzeigen. Dies ist möglicherweise hilfreich für Ihre zweite Frage. Sie sollten es jedoch klarstellen.

andrei1089
quelle
29

Wie für die Umgebungsvariablen:

import os
print os.environ["HOME"]

Ich fürchte, Sie müssten Ihren zweiten Punkt noch ein wenig ausarbeiten, bevor eine anständige Antwort möglich ist.

Jim Brissom
quelle
27
import os
for a in os.environ:
    print('Var: ', a, 'Value: ', os.getenv(a))
print("all done")

Dadurch werden alle Umgebungsvariablen zusammen mit ihren Werten gedruckt.

Azorian
quelle
27

Eigentlich kann es so weg gemacht werden:

import os

for item, value in os.environ.items():
    print('{}: {}'.format(item, value))

Oder einfach:

for i, j in os.environ.items():
    print(i, j)

So zeigen Sie den Wert im Parameter an:

print(os.environ['HOME'])

Oder:

print(os.environ.get('HOME')

So stellen Sie den Wert ein:

os.environ['HOME'] = '/new/value'
britodfbr
quelle
4
Nein, diese Antwort fügt wirklich nichts zu den vorhandenen Antworten hinzu
Bart
1
Dies sollte entfernt werden, es ist ein Duplikat anderer Antworten. str.formatist nur eine schicke Ergänzung.
Connectyourcharger
>>> import os, pprint; pprint.pprint(list(os.environ.items()))
Noobninja
18

Wenn Sie planen, den Code in einem Produktions-Webanwendungscode zu verwenden,
verwenden Sie ein beliebiges Webframework wie Django / Flask, verwenden Sie Projekte wie envparse . Mit diesem Code können Sie den Wert als Ihren definierten Typ lesen.

from envparse import env
# will read WHITE_LIST=hello,world,hi to white_list = ["hello", "world", "hi"]
white_list = env.list("WHITE_LIST", default=[]) 
# Perfect for reading boolean
DEBUG = env.bool("DEBUG", default=False)

HINWEIS: kennethreitz ' autoenv ist ein empfohlenes Tool zum Erstellen projektspezifischer Umgebungsvariablen. Bitte beachten Sie, dass diejenigen, die es verwenden autoenv, die .envDatei privat halten (für die Öffentlichkeit nicht zugänglich).

Renjith Thankachan
quelle
11

Es gibt auch eine Reihe großartiger Bibliotheken. Mit Envs können Sie beispielsweise Objekte aus Ihren Umgebungsvariablen analysieren, was rad ist. Zum Beispiel:

from envs import env
env('SECRET_KEY') # 'your_secret_key_here'
env('SERVER_NAMES',var_type='list') #['your', 'list', 'here']
Peter Konneker
quelle
3

Für Django siehe ( https://github.com/joke2k/django-environ )

$ pip install django-environ

import environ
env = environ.Env(
# set casting, default value
DEBUG=(bool, False)
)
# reading .env file
environ.Env.read_env()

# False if not in os.environ
DEBUG = env('DEBUG')

# Raises django's ImproperlyConfigured exception if SECRET_KEY not in os.environ
SECRET_KEY = env('SECRET_KEY')
Leonardo
quelle
0

Sie können dies auch versuchen

Installieren Sie zuerst python-decouple

pip install python-decouple

Importieren Sie es in Ihre Datei

from decouple import config

Dann holen Sie sich die env-Variable

SECRET_KEY=config('SECRET_KEY')

Lesen Sie mehr über die Python - Bibliothek hier

Steve Mitto
quelle