За что отвечает переменное окружение в Python
Что проверяют
Понимаете ли вы, как приложение получает конфигурацию и секреты извне, не меняя код. Следом обычно спрашивают, как читать булевы и числовые значения и почему .env не кладут в репозиторий. Иногда под этой формулировкой имеют в виду виртуальное окружение, уточнить это вслух нормально.
Как отвечать
Переменные окружения это пары «имя, строка», которые процесс получает от родителя при запуске и передаёт своим дочерним процессам. В Python они доступны через os.environ:
os.environ["DATABASE_URL"]: выброситKeyError, если переменной нет. Удобно для обязательных настроек: приложение падает на старте, а не посреди работы;os.getenv("LOG_LEVEL", "INFO"): вернёт значение по умолчанию илиNone;- запись в
os.environ: видна текущему процессу и тем, что он запустит черезsubprocess, но не родительской оболочке.
Через них передают адреса баз и брокеров, ключи API, уровень логирования, режим отладки, разные значения для dev, stage и prod при одном образе. Это принцип конфигурации из 12-factor app.
Сам интерпретатор тоже настраивается переменными: PYTHONPATH добавляет пути поиска модулей, PYTHONUNBUFFERED=1 отключает буферизацию вывода (важно для логов в Docker), PYTHONDONTWRITEBYTECODE запрещает запись .pyc, VIRTUAL_ENV выставляет скрипт активации venv. Django ищет настройки по DJANGO_SETTINGS_MODULE.
В проекте конфигурацию собирают в одном месте: pydantic-settings с классом BaseSettings приводит типы и валидирует значения, python-dotenv подгружает .env для локальной разработки и по умолчанию не перезаписывает уже заданные переменные.
Где спотыкаются
Пишут if os.getenv("DEBUG"):. Любая непустая строка истинна, и DEBUG=False включает отладку.
Считают переменные окружения надёжным хранилищем секретов. Они видны в docker inspect, в /proc/<pid>/environ и в дампах, поэтому в проде секреты часто монтируют файлами или берут из Vault.
Меняют os.environ в тесте после того, как модуль прочитал настройку при импорте. Значение уже сохранено в модуле, нужны monkeypatch.setenv и перечитывание конфигурации.