Доступ, экспорт и удаление переменных среды с помощью 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
.
Вы можете использовать имя переменной среды в качестве ключа к объекту 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.
Статьи по теме, которые вам также могут понравиться