我想制作一个开箱即用的软件包,具有合理的默认变量,例如定义一些服务器、端口等,以便代码可以像普通用户所期望的那样工作,而无需进一步配置。 但如果 .env 文件存在,我希望覆盖此环境变量,以便允许配置其他环境。 我读到,如果不存在 .env 文件,python-dotenv load_values 将使用默认值,但 pypi 上没有示例如何理想地进行设置。
我认为这个方法可行。
default_dict = {'API_KEY':'test'} #e.x for an api_key
try:
load_dotenv(find_dotenv())
api_key = os.getenv("API_KEY")
except:
api_key = default_dict['API_KEY']
阅读@chepner的评论,我认为可能有一个使用合并的解决方案。还不知道有这个功能。
from dotenv import dotenv_values
default_envs = {"MY_SERVER": "https://my-server.com"}
config = {
**default_envs,
**dotenv_values
}
这可能很好,因为它允许部分覆盖,而且我不需要遍历所有变量。
欢迎评论。
python_dotenv 只是将变量加载到环境的便捷方法
您可以添加一个选项来覆盖已经存在的环境变量
load_dotenv(override=True)
可以在这里找到 env 定义的顺序: https://github.com/theskumar/python-dotenv?tab=readme-ov-file#variable-expansion
要加载默认值,只需使用
os.getenv
实现
os.getenv(key, default = None)