对于我的所有项目,我从一开始就加载所有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()
函数仅支持boolean
,int
,float
和str
,它将是什么样?
例如,进行铸造并不难。 https://stackoverflow.com/a/11781375/1452257,但我尚不清楚如何在键入支持时使用它。
鉴于以上评论,我建议您为配置文件使用以下格式(settings.py
,config.py
等):
from dotenv import load_dotenv
import os
load_dotenv()
SSL = bool(os.getenv("SSL"))
PORT = int(os.getenv("PORT"))
不需要type_env()
函数,因为它们都是在python文件中完成的,可以在任何模块中导入。
通过这种方式,您可以看到,如果.env
文件中使用的值无法转换为您期望的类型,则配置将失败。
现在就在这些变量的位置,只需导入它们,因为它们已经被转换为正确的类型。