Переменные окружения Linux в Python3

avm

Опубликован:  2018-03-04T07:39:12.100579Z
800

Переменные окружения Linux предоставляют простой и надёжный способ хранить и передавать настройки различным приложениям в системе. При разработке web-приложений с Python3, когда код приложения хранится в открытом git-репозитории, использование переменных окружения позволяет скрыть приватные данные в конфигурационных файлах разрабатываемого приложения. Ниже речь пойдёт о переменных окружения и методах получения данных из переменных окружения в коде Python-программ.

Детальная информация о переменных окружения изложена на wiki.archlinux.org, статья описывает виды переменных окружения, способы их создания, изменения и удаления. Отмечу основные тезисы. Полный список доступных в системе переменных окружения можно посмотреть при помощи команд printenv и env. Если имя переменной окружения известно, то echo даёт возможность получить хранящееся в ней значение.

sadmin@stretch:~$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
sadmin@stretch:~$ 

Создать переменную окружения в текущем сеансе можно при помощи команды export.

sadmin@stretch:~$ export ABCD=abcd
sadmin@stretch:~$ 

После создания переменной окружения она сразу становится доступной для использования в этом сеансе.

sadmin@stretch:~$ echo $ABCD
abcd
sadmin@stretch:~$ 

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

sadmin@stretch:~$ export ABCD='here is the deal'
sadmin@stretch:~$ echo $ABCD
here is the deal
sadmin@stretch:~$ 

Срок жизни созданных таким образом переменных окружения ограничивается сроком жизни сеанса. Чтобы переменная окружения получила перманентный характер и была доступна после перезагрузки компьютера или во всех сеансах терминальной программы, её следует создать на уровне пользователя системы. Для этого достаточно открыть файл ~/.bashrc и дописать в конец этого файла соответствующую команду.

bashrc

После сохранения файла и выхода из текстового редактора следует обновить сессию.

sadmin@stretch:~$ source .bashrc
sadmin@stretch:~$ 

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

sadmin@stretch:~$ echo $ABCD
this variable is permanent
sadmin@stretch:~$ 

Теперь следует рассмотреть способ доступа к переменным окружения в python-коде.

sadmin@stretch:~$ python3
Python 3.5.3 (default, Jan 19 2017, 14:11:04) 
[GCC 6.3.0 20170118] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 

Модуль 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 являются наилучшим местом их хранения.

 
Метки:  linux, python3x
Комментарии: