Переменные локального окружения Heroku Python

Работа над проектом heroku django.

Цель: Я хочу запускать сервер локально с тем же кодом и на облаке (имеет смысл).

Проблема: Окружение отличается на сервере linux (heroku) и локальном ПК с системой windows. Локальные переменные окружения отличаются от конфигурационных переменных облачного Heroku. Конфигурационные переменные Heroku можно легко настроить с помощью CLI heroku config:set TIMES=2.

Пока настройка локальных env vars является полной неразберихой.

Я попробовал сделать следующее в cmd: py -c "import os;os.environ['Times']=2" # To set an env var

Затем выполнил py -c "import os;os.environ.get('Times','Not Found')" stdout: "Not Found".

После небольшого исследования оказалось, что такие env vars хранятся временно в зависимости от использования процесса/сессии.

Итак, мне пришла в голову идея использовать файл .env. Я бы хотел, чтобы os.environ перенаправлялся в .env файл корневого проекта heroku вместо PC env vars. Поэтому я нашел этот инструмент direnv, идеально подходящий для Unix-подобных ОС, но недоступный для Windows.

views.py код (работает идеально на облаке, болеет на локальной машине):

import os
import requests
from django.shortcuts import render
from django.http import HttpResponse
from .models import Greeting

def index(request):
    # get method takes 2 parameters (env_var_string,return value if var is not found)
    times = int(os.environ.get('TIMES',3))

    return HttpResponse('<p>'+ 'Hello! ' * times+ '</p>')

def db(request):
    greeting = Greeting()
    greeting.save()
    greetings = Greeting.objects.all()
    return render(request, "db.html", {"greetings": greetings})

Главный вопрос: Есть ли правильный способ скрыть секреты локально в windows и получить к ним доступ по os.environ['KEY']?

Другая теория решения: Мне интересно, имеет ли виртуальная среда python свои собственные переменные окружения? Если да, то я активирую venv локально, не затрагивая облако. Поэтому os.environ['KEY'] перенаправляется на переменные venv. Опять же, это всего лишь теория.

Вы можете использовать переменные окружения, которые можно получить через os.environ['KEY'].
Один и тот же код будет работать как на локальной разработке, так и на Heroku.

На Heroku эти переменные определяются с помощью ConfigVars heroku config:set KEY=val, а локально (например, на Windows) те же переменные определяются в файле .env (используйте dotenv для их загрузки). Файл .env никогда не фиксируется вместе с исходным кодом.

Вернуться на верх