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


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)

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


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)

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


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


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.


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'

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)


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']

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

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.