【问题标题】:Possible to generate auto-complete from a namespace object?可以从命名空间对象生成自动完成吗?
【发布时间】:2018-09-06 04:36:24
【问题描述】:

假设我有一个看起来像这样的.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 都会显示为自动完成选项。

如何使命名空间对象提供自动完成功能?

【问题讨论】:

  • 把它写成一个python文件?这就是您通常会导入的内容...
  • 你为什么不把你的.env文件重命名为.py文件并导入它。模块命名空间和任何命名空间一样好......
  • 真正的.env 文件被用作真正的本地.env 文件。即 - 它保存数据库用户名和密码,并且在 .gitignore 中用于 git 提交。
  • 我猜你们的意思是创建类似secretstuff.py 的东西并将其添加到.gitignore 并像任何其他python 文件一样导入它?有一个 .env 坐在那里并确切地知道它的内容和原因真是太好了。
  • 等等,为什么自动完成首先那么重要?

标签: python python-3.x visual-studio-code


【解决方案1】:

我一直认为 dotenv 是一个非常愚蠢的库,并且使如此简单的东西过于复杂。使用 Python 的导入系统将您的 var 加载到模块命名空间中。

import imp
dotenv_vars = imp.load_source('dotenv_vars', '.env')

【讨论】:

  • 哇。凉爽的!这否定了上面的所有代码。简单得多。谢谢! ? 你有自动完成的技巧吗?
  • 我不熟悉visual-studio-code IDE,所以我无法评论它的自动完成功能(或缺乏)。它可能只是静态工作,要求它处理动态加载的数据就像是在求魔法。
  • 嗯,你在这里提供的答案很神奇。所以我想也许你还有另一个咒语。 ? 再次感谢。
  • 如果您不在 Windows 上,您可以创建一个指向 .env 目标的 dotenv_vars.py 符号链接。然后像往常一样import dotenv_vars。如果给予这种鼓励,IDE 自动完成功能可能会起作用。
  • 你认为你会把它放在安装步骤的什么地方?或者你只是说把它放在 onstart.py 中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-25
相关资源
最近更新 更多