Загрузка переменных окружения на уровне модуля небезопасна. В таком случае к ним имеет доступ любая функция или класс из данного модуля. Вдобавок, при импортировании модуля автоматически импортируются все объявленные переменные окружения.


Пример 1

Плохо:


from environs import Env


env = Env()
env.read_env()

Плохо:


from environs import Env


if __name__ == '__main__'
    env = Env()
    env.read_env()

Хорошо:


from environs import Env


def main():
    env = Env()
    env.read_env()


if __name__ == '__main__'
    main()


Пример 2

Плохо:


from dotenv import load_dotenv


load_dotenv()

Плохо:


from dotenv import load_dotenv


if __name__ == '__main__'
    load_dotenv()

Хорошо:


from dotenv import load_dotenv


def main():
    load_dotenv()


if __name__ == '__main__'
    main()