使用文件投射并键入环境变量

问题描述 投票:0回答:1

对于我的所有项目,我从一开始就加载所有env变量,并按照.env.example之后的dotenv-safe approach文件的说明检查所有预期的键是否存在。

但是,env变量是字符串,每当在Python代码中使用它们时,都必须手动对其进行强制转换。这很烦人并且容易出错。我想使用.env.example文件中的信息来转换env变量,并在我的IDE(VS代码)中获得Python类型的支持。我该怎么办?

env.example

PORT: int
SSL: boolean

Python理想行为

# Set the env in some way (doesn't matter)
import os
os.environment["SSL"] = "0"
os.environment["PORT"] = "99999"

env = type_env()
if not env["SSL"]: # <-- I'd like this to be cast to boolean and typed as a boolean
    print("Connecting w/o SSL!")
if 65535 < env["PORT"]:  # <-- I'd like this to be cast to int and typed as an int
    print("Invalid port!")

在此代码示例中,假设type_env()函数仅支持booleanintfloatstr,它将是什么样?

例如,进行铸造并不难。 https://stackoverflow.com/a/11781375/1452257,但我尚不清楚如何在键入支持时使用它。

python visual-studio-code environment-variables typing
1个回答
0
投票

鉴于以上评论,我建议您为配置文件使用以下格式(settings.pyconfig.py等):

from dotenv import load_dotenv
import os

load_dotenv()

SSL = bool(os.getenv("SSL"))
PORT = int(os.getenv("PORT"))

不需要type_env()函数,因为它们都是在python文件中完成的,可以在任何模块中导入。

通过这种方式,您可以看到,如果.env文件中使用的值无法转换为您期望的类型,则配置将失败。

现在就在这些变量的位置,只需导入它们,因为它们已经被转换为正确的类型。

© www.soinside.com 2019 - 2024. All rights reserved.