Jak uzyskać dostęp do wartości zmiennych środowiskowych?

2112

Ustawiam zmienną środowiskową, do której chcę uzyskać dostęp w mojej aplikacji Python. Jak uzyskać jego wartość?

Amit Yadav
źródło

Odpowiedzi:

3159

Zmienne środowiskowe są dostępne poprzez os.environ

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

Lub możesz zobaczyć listę wszystkich zmiennych środowiskowych, używając:

os.environ

Czasami może być konieczne wyświetlenie pełnej listy!

# 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))

Domyślna instalacja języka Python w systemie Windows to C:\Python. Jeśli chcesz się dowiedzieć podczas uruchamiania Pythona, możesz:

import sys
print(sys.prefix)
Pręt
źródło
1
cześć pręt, dziękuję za twoją skuteczną odpowiedź dotyczącą „domyślnej instalacji”; skuteczny z punktu widzenia szybkiego zrozumienia go zamiast przechodzenia przez linki. Naprawdę to doceniam :) ale odnośnie mojego (1) pytania proszę spojrzeć na poniższy fragment polecenia i wyników: >>> import os >>> print os.environ ['PYTHONPATH'] Traceback (ostatnie połączenie ostatnio): Plik " <konsola> ", wiersz 1, w <module> Plik" C: \ Python25 \ lib \ os.py ", wiersz 435, w getitem return self.data [key.upper ()] KeyError: 'PYTHONPATH' >>> drukuj os.environ.get ('PYTHONPATH') Brak >>> // PLZ, aby kontynuować ... //
Amit Yadav
W pierwszej kolejności skrypt zgłasza wyjątek, zaś w drugim - brak. Czy jest jakiś sposób, aby uzyskać znaczącą wartość, czy robię w niewłaściwy sposób? Amit.
Amit Yadav,
7
os.environ jest słownikiem. Próba uzyskania dostępu do klucza nieobecnego w słowniku spowoduje wygenerowanie błędu KeyError. Metoda get po prostu zwraca None, gdy klucz nie istnieje. Czy masz ustawiony PYTHONPATH? Czy możesz wypróbować zmienną taką jak PATH, która na pewno istnieje? Czy zwraca sensowną wartość?
Rod
2
PYTHONPATH służy do dodawania nowej ścieżki wyszukiwania do Pythona (sys.path) spoza Pythona. Spójrz na docs.python.org/using/cmdline.html#environment-variables
Rod
11
.get()można również podać wartość domyślną.
Gringo Suave,
242

Aby sprawdzić, czy klucz istnieje (zwraca Truelub False)

'HOME' in os.environ

Możesz także użyć get()podczas drukowania klucza; przydatne, jeśli chcesz użyć wartości domyślnej.

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

gdzie /home/username/jest domyślna

lgriffiths
źródło
3
Który jest lepszy "HOME" in os.environlub os.environ.get('HOME')?
endolith,
11
@endolith Robią różne rzeczy. Pierwszy zwraca True lub False, a drugi zwraca wartość, być może None.
Trenton
@endolith, poprawne pytanie będzie "HOME" in os.environprzeciwko os.environ.get('HOME') is None. Jak widać pierwszy jest znacznie bardziej czytelny i wygodny w pracy.
Konstantin Sekeresh
58

Pierwotne pytanie (pierwsza część) brzmiało „jak sprawdzać zmienne środowiskowe w Pythonie”.

Oto jak sprawdzić, czy ustawiony jest $ FOO:

try:  
   os.environ["FOO"]
except KeyError: 
   print "Please set the environment variable FOO"
   sys.exit(1)
Scott C. Wilson
źródło
66
„FOO” w os.environ
ealfonso
4
Spróbuj może być szybszy. Przypadek env vars jest prawdopodobnie najlepszy dla 'try': stackoverflow.com/a/1835844/187769
RandomInsano
13
@RandomInsano szybciej = / = lepiej. Ten kod wygląda mniej czytelnie niż "if 'FOO' not in os.environ: ..."blok
Dangercrow
44

Możesz uzyskać dostęp do zmiennych środowiskowych za pomocą

import os
print os.environ

Spróbuj zobaczyć zawartość zmiennych środowiskowych PYTHONPATH lub PYTHONHOME, być może będzie to pomocne w przypadku drugiego pytania. Jednak powinieneś to wyjaśnić.

andrei1089
źródło
29

Jeśli chodzi o zmienne środowiskowe:

import os
print os.environ["HOME"]

Obawiam się, że będziesz musiał jeszcze bardziej uwydatnić swój drugi punkt, zanim możliwa będzie przyzwoita odpowiedź.

Jim Brissom
źródło
27
import os
for a in os.environ:
    print('Var: ', a, 'Value: ', os.getenv(a))
print("all done")

Spowoduje to wydrukowanie wszystkich zmiennych środowiskowych wraz z ich wartościami.

Azerski
źródło
27

Właściwie można to zrobić w ten sposób:

import os

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

Lub po prostu:

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

Aby wyświetlić wartość parametru:

print(os.environ['HOME'])

Lub:

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

Aby ustawić wartość:

os.environ['HOME'] = '/new/value'
britodfbr
źródło
4
Nie, ta odpowiedź naprawdę nie dodaje niczego poza istniejącymi odpowiedziami
Bart
1
Należy to usunąć, jest to duplikat innych odpowiedzi. str.formatto tylko fantazyjny dodatek.
connectyourcharger
>>> import os, pprint; pprint.pprint(list(os.environ.items()))
noobninja
18

Jeśli planujesz używać kodu w produkcyjnym kodzie aplikacji WWW,
używając dowolnego frameworka internetowego, takiego jak Django / Flask, użyj projektów takich jak envparse , używając go możesz odczytać wartość jako zdefiniowany typ.

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)

UWAGA: autoenv kennethreitza jest zalecanym narzędziem do tworzenia zmiennych środowiskowych specyficznych dla projektu, należy pamiętać, że ci, którzy używają, autoenvzachowaj .envplik prywatny (niedostępny dla publicznego)

Renjith Thankachan
źródło
11

Istnieje również wiele świetnych bibliotek. Na przykład envs pozwoli ci analizować obiekty ze zmiennych środowiskowych, czyli rad. Na przykład:

from envs import env
env('SECRET_KEY') # 'your_secret_key_here'
env('SERVER_NAMES',var_type='list') #['your', 'list', 'here']
Peter Konneker
źródło
3

Dla django patrz ( 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
źródło
0

Możesz także spróbować tego

Najpierw zainstaluj python-decouple

pip install python-decouple

zaimportuj go do swojego pliku

from decouple import config

Następnie pobierz zmienną env

SECRET_KEY=config('SECRET_KEY')

Przeczytaj więcej o bibliotece Pythona tutaj

Steve Mitto
źródło