Heroku Python 本地环境变量

Heroku Python Local Environment Variables

正在处理 heroku django 项目。

目标:我想 运行 本地服务器也使用云上的相同代码(有意义)。

问题: 环境不同于 linux 服务器 (heroku) 和本地 PC windows 系统。 本地环境变量不同于云 Heroku 配置变量。 可以使用 CLI heroku config:set TIMES=2.

轻松设置 Heroku 配置变量

虽然设置本地环境变量是一团糟。

我在 cmd 中尝试了以下操作: py -c "import os;os.environ['Times']=2" # 设置环境变量

然后 运行 py -c "import os;os.environ.get('Times','Not Found')" 标准输出:“未找到”。

经过一些研究后,似乎这种环境变量是根据 process/session 使用情况临时存储的。

解决方案理论:将os.environ重定向到根heroku项目的.env文件而不是PC环境变量。所以我发现这个工具 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 文件永远不会与源代码一起提交。