Переменные окружения Linux в Python3
newbie
Опубликован: | 2018-10-12T06:10:06.253348Z |
Отредактирован: | 2018-10-12T06:10:06.253348Z |
Переменные окружения Linux предоставляют простой и надёжный способ хранить и передавать настройки различным приложениям в системе. При разработке web-приложений с Python3, когда код приложения хранится в открытом git-репозитории, использование переменных окружения позволяет скрыть приватные данные в конфигурационных файлах разрабатываемого приложения. Ниже речь пойдёт о переменных окружения и методах получения данных из переменных окружения в коде Python-программ.
Детальная информация о переменных окружения изложена на wiki.archlinux.org, статья описывает виды переменных окружения, способы их создания, изменения и удаления. Отмечу основные тезисы. Полный список доступных в системе переменных окружения можно посмотреть при помощи команд printenv
и env
. Если имя переменной окружения известно, то echo
даёт возможность получить хранящееся в ней значение.
newbie@stretch:~$ echo $PATH /usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games newbie@stretch:~$
Создать переменную окружения в текущем сеансе можно при помощи команды export
.
newbie@stretch:~$ export ABCD=abcd newbie@stretch:~$
После создания переменной окружения она сразу становится доступной для использования в этом сеансе.
newbie@stretch:~$ echo $ABCD abcd newbie@stretch:~$
Если строка, которую нужно сохранить в переменной окружения содержит пробелы, то их можно экранировать кавычками при создании переменной окружения.
newbie@stretch:~$ export ABCD='here is the deal' newbie@stretch:~$ echo $ABCD here is the deal newbie@stretch:~$
Срок жизни созданных таким образом переменных окружения ограничивается сроком жизни сеанса. Чтобы переменная окружения получила перманентный характер и была доступна после перезагрузки компьютера или во всех сеансах терминальной программы текущего пользователя, её следует создать на уровне пользователя системы. Для этого достаточно открыть файл ~/.bashrc
и дописать в конец этого файла соответствующую команду.
После сохранения файла и выхода из текстового редактора следует обновить сессию.
newbie@stretch:~$ source ~/.bashrc newbie@stretch:~$
Созданная таким образом переменная окружения будет доступна во всех сеансах пользователя, включая текущий сеанс, и после перезагрузки компьютера.
newbie@stretch:~$ echo $ABCD this variable is permanent newbie@stretch:~$
Теперь следует рассмотреть способ доступа к переменным окружения в python-коде.
Модуль os
стандартной библиотеки даёт возможность просмотреть все доступные в системе переменные окружения.
>>> import os >>> for i in os.environ: ... print(i) ... XDG_DATA_HOME XDG_SESSION_PATH XDG_CURRENT_DESKTOP LS_COLORS XDG_SESSION_DESKTOP TERM XDG_SESSION_ID LOGNAME XDG_SEAT DISPLAY XDG_GREETER_DATA_DIR XDG_VTNR QT_LINUX_ACCESSIBILITY_ALWAYS_ON DESKTOP_SESSION _ SHELL XDG_SESSION_TYPE GPG_AGENT_INFO PATH DBUS_SESSION_BUS_ADDRESS SSH_AUTH_SOCK XDG_SEAT_PATH SHLVL LANG XDG_CONFIG_HOME _LXSESSION_PID SAL_USE_VCLPLUGIN PWD GTK_MODULES GDM_LANG XDG_MENU_PREFIX SSH_AGENT_PID ABCD USER XDG_CONFIG_DIRS HOME XDG_RUNTIME_DIR XAUTHORITY QT_ACCESSIBILITY XDG_DATA_DIRS GDMSESSION >>>
Если имя переменной окружения известно, то не составляет труда получить её значение, как из обычного словаря при помощи метода get
.
>>> os.environ.get('ABCD') 'this variable is permanent' >>>
Кроме того, в этом же модуле есть функция getenv
, которая по заданному имени переменной возвращает значение, хранящееся в этой переменной.
>>> os.getenv('ABCD') 'this variable is permanent' >>>
Если переменная окружения не существует, то можно задать возвращаемое функцией значение в этом случае.
>>> os.getenv('BADNAME', 'not found') 'not found' >>>
Таким образом, например, в конфигурационном файле Flask-приложения можно задать значение секретного ключа ссылкой на соответствующую переменную окружения, в которой секретный ключ будет храниться.
import os class Config: SECRET_KEY = os.getenv('SECRET_KEY')
В результате чего открытый репозиторий не будет содержать значение секретного ключа. Получается что, чтобы не "светить" приватные данные типа явок и паролей в открытом git-репозитории, переменные окружения Linux являются наилучшим местом их хранения.