Как получить доступ к значениям переменных среды?

2122

Я установил переменную среды, к которой я хочу получить доступ в моем приложении Python. Как мне получить его стоимость?

Амит Ядав
источник

Ответы:

3175

Переменные среды доступны через 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 (последний вызов был последним): File " <console> ", строка 1, в <файле> файл" C: \ Python25 \ lib \ os.py ", строка 435, в getitem, возвращают self.data [key.upper ()] KeyError: 'PYTHONPATH' >>> print os.environ.get ('PYTHONPATH') Нет >>> // Продолжение PLZ ... //
Амит Ядав
В 1-ом способе сценарий создает исключение, в то время как в 2-м сценарий дает 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()также может быть задано по умолчанию.
Гринго Суаве
243

Чтобы проверить, существует ли ключ (возвращает Trueили False)

'HOME' in os.environ

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

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

где /home/username/по умолчанию

lgriffiths
источник
3
Что лучше "HOME" in os.environили os.environ.get('HOME')?
эндолиты
11
@endolith Они делают разные вещи. Первый возвращает True или False, а второй возвращает значение, возможно None.
Трентон
1
@ Эндолит, правильный вопрос будет "HOME" in os.environпротив os.environ.get('HOME') is None. Как вы видите, во-первых, гораздо удобнее читать и с ним удобно работать.
Константин Секереш
59

Первоначальный вопрос (первая часть) был «как проверить переменные окружения в Python».

Вот как проверить, установлен ли $ FOO:

try:  
   os.environ["FOO"]
except KeyError: 
   print "Please set the environment variable FOO"
   sys.exit(1)
Скотт К Уилсон
источник
66
"FOO" в os.environ
ealfonso
4
Попробуй можно быстрее. Случай env vars, вероятно, лучше всего подходит для try: stackoverflow.com/a/1835844/187769
RandomInsano
13
@RandomInsano быстрее = / = лучше. Этот код выглядит менее читабельным, чем "if 'FOO' not in os.environ: ..."блок
Dangercrow
44

Вы можете получить доступ к переменным среды, используя

import os
print os.environ

Попробуйте просмотреть содержимое переменных окружения PYTHONPATH или PYTHONHOME, возможно, это будет полезно для вашего второго вопроса. Однако вы должны уточнить это.

andrei1089
источник
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")

Это напечатает все переменные окружения вместе с их значениями.

Azorian
источник
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'
britodfbr
источник
4
Нет, этот ответ действительно ничего не добавляет поверх существующих ответов
Барт
1
Это должно быть удалено, это дубликат других ответов. str.formatэто просто модное дополнение.
connectyourcharger
>>> import os, pprint; pprint.pprint(list(os.environ.items()))
нообниня
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 позволит вам анализировать объекты из переменных вашей среды, что является рад. Например:

from envs import env
env('SECRET_KEY') # 'your_secret_key_here'
env('SERVER_NAMES',var_type='list') #['your', 'list', 'here']
Питер Коннекер
источник
3

Для django см. ( 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
источник
0

Вы также можете попробовать это

Сначала установите python-decouple

pip install python-decouple

импортировать его в свой файл

from decouple import config

Тогда получите переменную env

SECRET_KEY=config('SECRET_KEY')

Узнайте больше о библиотеке Python здесь

Стив Митто
источник