Як отримати доступ до змінних значень середовища?


2115

Я встановлюю змінну середовища, до якої я хочу отримати доступ у своєму додатку Python. Як я можу отримати його значення?

Відповіді:


3162

До змінних середовища можна отримати доступ через os.environ

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

Або ви можете побачити список всіх змінних середовища, використовуючи:

os.environ

Як іноді, можливо, вам знадобиться переглянути повний список!

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

Установка Python за замовчуванням є у Windows C:\Python. Якщо ви хочете дізнатися під час запуску python, ви можете зробити:

import sys
print(sys.prefix)

1
привіт стрижень, дякую за вашу ефективну відповідь щодо "встановлення за замовчуванням"; ефективно з точки зору, щоб зрозуміти це швидко, а не переходити через посилання. Це дійсно я вдячний :) але щодо мого (1) питання, будь ласка, подивіться на команду та виводить фрагмент нижче: >>> import os >>> print os.environ ['PYTHONPATH'] Traceback (останній останній виклик): Файл " <console> ", рядок 1, у <module> Файл" C: \ Python25 \ lib \ os.py ", рядок 435, у getitem return self.data [key.upper ()] KeyError: 'PYTHONPATH' >>> print os.environ.get ('PYTHONPATH') Немає >>> // PLZ буде продовжено ... //
Аміт Ядав

У 1-му способі сценарій кидає виняток, тоді як у другому дається None. Отже, чи є якийсь спосіб отримати його змістовну цінність чи я роблю неправильно ??? Аміт.
Аміт Ядав

7
os.environ - це словник. При спробі отримати доступ до ключа, який не присутній у словнику, буде видалено KeyError. Метод get просто повертає None, коли ключ не існує. У вас встановлений PYTHONPATH? Чи можете ви спробувати зі змінною, такою як PATH, яка гарантовано існує? Чи повертає вона змістовне значення?
Прут

2
PYTHONPATH використовується для додавання нового шляху пошуку до Python (sys.path) ззовні за межами Python. Подивіться на docs.python.org/using/cmdline.html#environment-variables
прут

11
.get()також може бути призначений за замовчуванням.
Gringo Suave

242

Щоб перевірити, чи існує ключ (повертається Trueчи False)

'HOME' in os.environ

Ви також можете використовувати get()під час друку ключа; корисно, якщо ви хочете використовувати за замовчуванням.

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

де /home/username/за замовчуванням


3
Що краще, "HOME" in os.environчи os.environ.get('HOME')?
ендоліт

11
@endolith Вони роблять різні речі. Перший повертає True або False, а другий повертає значення, можливо None.
Трентон

@endolith, правильне питання було б "HOME" in os.environпроти os.environ.get('HOME') is None. Як бачимо спочатку, це набагато легше читати та зручніше працювати.
Костянтин Секереш

58

Первісне питання (перша частина) було "як перевірити змінні середовища в Python".

Ось як перевірити, чи встановлено $ FOO:

try:  
   os.environ["FOO"]
except KeyError: 
   print "Please set the environment variable FOO"
   sys.exit(1)

66
"FOO" в os.environ
ealfonso

4
Спробуйте можна швидше. Випадок окр Варс, швидше за все , найкраще підходить для «спробувати»: stackoverflow.com/a/1835844/187769
RandomInsano

13
@RandomInsano швидше = / = краще. Цей код виглядає менш читабельним, ніж "if 'FOO' not in os.environ: ..."блок
Dangercrow

44

Ви можете отримати доступ до змінних середовища за допомогою

import os
print os.environ

Спробуйте переглянути зміст середовища PYTHONPATH або PYTHONHOME, можливо, це буде корисним для вашого другого питання. Однак вам слід уточнити це.


29

Щодо змінних середовища:

import os
print os.environ["HOME"]

Я боюся, що вам доведеться детальніше викласти свою другу точку, перш ніж можна отримати гідну відповідь.


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

Це буде друкувати всі змінні середовища разом із їх значеннями.


27

Насправді це можна зробити за допомогою:

import os

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

Або просто:

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

Для перегляду значення параметра:

print(os.environ['HOME'])

Або:

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

Щоб встановити значення:

os.environ['HOME'] = '/new/value'

4
Ні, ця відповідь насправді нічого не додає поверх існуючих відповідей
Барт

1
Це слід видалити, це дублікат інших відповідей. str.format- просто фантазійне доповнення.
connectyourcharger

>>> import os, pprint; pprint.pprint(list(os.environ.items()))
noobninja

18

Якщо ви плануєте використовувати код у виробничому коді веб-додатків,
використовуючи будь-який веб-фреймворк, як Django / Flask, використовуйте такі проекти, як envparse , використовуючи його, ви можете прочитати значення як визначений тип.

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)

ПРИМІТКА: autoenv kennethreitz є рекомендованим інструментом для створення змінних середовища для конкретних проектів. Зверніть увагу, що ті, хто використовує, autoenvзберігають .envфайл приватним (недоступним для загального доступу)


11

Також є велика кількість чудових бібліотек. Наприклад, envs дозволить вам розбирати об'єкти із змінних оточуючого середовища, що є rad. Наприклад:

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

3

Про джанго дивіться ( 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

Ви також можете спробувати це

Спочатку встановіть python-decouple

pip install python-decouple

імпортуйте його у свій файл

from decouple import config

Потім отримайте змінну env

SECRET_KEY=config('SECRET_KEY')

Детальніше про бібліотеку пітона читайте тут

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.