Что такое модуль dotenv и для чего он нужен
Что проверяют
Понимаете ли вы принцип «конфигурация отдельно от кода» и где заканчивается зона ответственности библиотеки. Вопрос простой, поэтому оценивают не определение, а продолжение: что попадает в репозиторий, откуда берутся значения на проде и что происходит при конфликте источников.
Как отвечать
Библиотека python-dotenv читает файл с парами ключ и значение и кладёт их в переменные окружения процесса, чтобы локально не выставлять их руками перед каждым запуском. Прикладной код при этом читает обычное окружение и не знает, откуда оно заполнилось.
from dotenv import load_dotenv
import os
load_dotenv() # уже заданные переменные не перезаписываются
dsn = os.environ["DATABASE_URL"] # падает сразу, если значения нет
debug = os.getenv("DEBUG", "0") == "1"Дальше говорите про практику. Сам файл в репозиторий не кладут, рядом держат образец со списком ключей и безопасными заглушками. На сервере значения обычно приходят от оркестратора или из хранилища секретов, а файл остаётся инструментом разработчика. Обязательные переменные лучше читать так, чтобы отсутствие валило запуск сразу, а не через час на первом обращении к базе. Разбор типов и проверку значений удобнее вынести в модель настроек, чем писать преобразования вручную в каждом месте.
Где спотыкаются
Называют библиотеку средством безопасности. Файл лежит открытым текстом рядом с кодом, ничего не шифруется, и защищает только дисциплина: файл не в репозитории, не в образе и не в логах.
Ловят «у меня работает», потому что загрузка вызвана позже, чем импортирован модуль, который прочитал настройку на уровне модуля. Порядок обязан быть обратным: сначала загрузка окружения, потом импорт прикладного кода.
Рассчитывают, что файл переопределит переменную, уже выставленную в окружении. По умолчанию приоритет у окружения, и на стенде с заданными переменными локальные значения просто игнорируются, а разработчик ищет ошибку в коде.