Доступ, экспорт и удаление переменных среды с помощью Python

Введение

Некоторым приложениям, возможно, придется использовать переменные, которые были инициализированы вне самой программы, а вместо этого в среде, в которой должен выполняться исходный код.

Переменные среды назначаются как часть среды, в которой выполняются процессы (например, приложения Python). Он состоит из пары имя/значение и может быть доступен, перезаписан и сброшен в любое время. Такие переменные обычно определяются непосредственно в интерфейсе командной строки или с помощью сценариев bash (например, при запуске операционной системы). Однако даже сами программы могут взаимодействовать с ними.

В сегодняшнем кратком руководстве мы покажем, как программно получить доступ к перезаписи и удалению существующих переменных среды, а также как экспортировать новые. Наконец, мы также продемонстрируем несколько способов проверки существования переменной окружения.

Доступ к переменной среды

Во-первых, мы продемонстрируем, как мы можем программно получить доступ к переменным среды, которые уже были экспортированы как часть среды, в которой выполняется наше приложение Python.

Предположим, что системный администратор инициализировал переменную среды с именем ENV со значением dev:

$ export ENV=dev

Мы можем убедиться, что переменная среды была инициализирована, повторив значение через командную строку:

$ echo ENV
dev

Теперь, если мы хотим программно получить доступ к переменной среды с помощью Python, нам нужно использовать объект сопоставления os.environ:

Объект отображения, в котором ключи и значения представляют собой строки, представляющие среду процесса. Например, environ['HOME'] — это путь к вашему домашнему каталогу (на некоторых платформах), который эквивалентен getenv("HOME") в C.

Это сопоставление фиксируется при первом импорте модуля os, обычно во время запуска Python в рамках обработки site.py. Изменения в среде, сделанные после этого времени, не отражаются в os.environ, за исключением изменений, сделанных путем прямого изменения os.environ.

- Документация по Python

Вы можете использовать имя переменной среды в качестве ключа к объекту os.environ для вывода значения:

import os
env_var = os.environ['ENV']
print(f'Currently working in {env_var} environment'.

Проблема с приведенным выше выражением заключается в том, что оно потерпит неудачу с KeyError в случае, если переменная среды ENV не присутствует в среде. Поэтому для доступа к нему лучше использовать os.environ.get(). Если он не существует, он просто вернет None, а не выбросит KeyError.

import os
env_var = os.environ.get('ENV')
print(f'Currently working in {env_var} environment'.

В будущем вы даже можете установить значение по умолчанию, если переменная среды еще не была инициализирована:

import os
env_var = os.environ.get('ENV', 'DEFAULT_VALUE')
print(f'Currently working in {env_var} environment'.

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

import os
try:
    env_var = os.environ['ENV']
except KeyError:
    # Do something
    ...

Экспорт или перезапись переменных среды

Если вы хотите экспортировать или даже перезаписать существующую переменную среды, вы можете использовать простое присваивание объекта os.environ:

import os
os.environ['ENV'] = 'dev'

И теперь может иметь больше смысла использовать нотацию try-except:

import os
try:
    env_var = os.environ['ENV']
except KeyError:
    os.environ['ENV'] = 'dev'

Проверьте, существует ли переменная среды

Мы частично рассмотрели этот раздел, но я также продемонстрирую несколько дополнительных способов проверки существования переменной среды.

Первый способ — просто получить доступ к объекту os.environ, используя имя переменной в качестве ключа, и поймать KeyError, указывающий, что переменная окружения не существует:

import os
try:
    env_var = os.environ['ENV']
    print('ENV environment variable exists')
except KeyError:
    print('ENV environment variable does not exist')

Другой способ — просто проверить, является ли переменная окружения членом объекта os.environ:

import os 
env_var_exists = 'ENV' in os.environ

Третий способ — проверить, возвращает ли метод os.environ.get() None (пока не указано значение по умолчанию):

import os
env_var = os.environ.get('ENV')
if not env_var:
    print('ENV environment variable does not exist')

Наконец, вы даже можете использовать метод has_key(), чтобы проверить, содержится ли имя переменной среды в качестве ключа в объекте сопоставления os.environ:

import os
env_var_exists = os.environ.has_key('ENV')

Сброс переменных окружения

Теперь, чтобы сбросить переменную окружения, вы можете вызвать операцию del:

del os.environ['ENV']

Опять же, приведенное выше выражение не будет выполнено, если ENV не был инициализирован и, следовательно, отсутствует в объекте сопоставления os.environ.

Чтобы избежать этого, вы можете использовать оператор if

import os
if 'ENV' in os.environ:
    del os.environ['ENV']

В качестве альтернативы более элегантным способом было бы pop переменную окружения из объекта сопоставления, как показано ниже.

os.environ.pop('ENV', None)

Последние мысли

В сегодняшней статье мы обсудили важные переменные среды и то, как они могут взаимодействовать с работающими приложениями Python. В частности, мы продемонстрировали, как программно получать доступ, сбрасывать или даже экспортировать переменные среды с помощью Python.

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

Стать участником и читать все истории на Medium. Ваш членский взнос напрямую поддерживает меня и других писателей, которых вы читаете. Вы также получите полный доступ ко всем историям на Medium.



Статьи по теме, которые вам также могут понравиться