想象一下,我有一个.env
文件,看起来像这样。
EARTH_SYNONYM1 = "World"
EARTH_SYNONYM2 = "Planet"
EARTH_SYNONYM3 = "Globe"
我设法将其加载到命名空间中。
import json
from pathlib import Path
from types import SimpleNamespace
from dotenv.main import dotenv_values # dotenv package needs to be installed.
def json_to_python(json_str):
return json.loads(json_str, object_hook=lambda d: SimpleNamespace(**d))
dotenv_path = Path(".") / ".env"
dotenv_vars_list = dotenv_values(dotenv_path)
dotenv_vars_as_json = json.dumps(dotenv_vars_list)
dotenv_vars = json_to_python(dotenv_vars_as_json)
print(dotenv_vars)
哪些印刷品
namespace(EARTH_SYNONYM1='World', EARTH_SYNONYM2='Planet', EARTH_SYNONYM3='Globe')
现在我可以做类似的事情
print(f"Hello {dotenv_vars.EARTH_SYNONYM1}")
哪些印刷品
Hello World
我想实现的目标是将其变成一个类模块(我认为)。
我想
import dotenv_vars
然后输入
dotenv_vars.
,并显示一系列自动完成选项。
继续此示例,每个EARTH_SYNONYMx
都将显示为自动完成选项。
如何使名称空间对象提供自动完成功能?
答案 0 :(得分:1)
我一直认为dotenv是一个非常愚蠢的库,过于简单了。使用Python的导入系统将vars加载到模块名称空间中。
import imp
dotenv_vars = imp.load_source('dotenv_vars', '.env')