如何永久设置本地配置文件?

问题描述

根据Prefect Configuration guide,我已经通过export PREFECT__USER_CONfig_PATH="./config.toml"设置了本地配置文件(即,在我当前的工作目录中),但是,这需要分别设置环境变量外壳会话。

我尝试使用prefect.config.user_config_path = "./config.toml"在Python脚本中设置配置,但这似乎无法以与export相同的方式加载配置文件,因为:

(来自docs)“首次导入Prefect时将解析配置文件,并且可以在prefect.config中将其作为活动对象使用。”

对于我的虚拟config.toml数据:

[api]
host = "localhost"
port = "5432"
url = "https://${api.host}:${api.port}"

prefect.config通过环境变量:

...'task_runner': {'default_class': 'prefect.engine.task_runner.TaskRunner'}},'api': {'host': 'localhost','port': 5432,'url': 'https://localhost:5432'},'user_config_path': './config.toml'}>

prefect.config通过脚本:

...'task_runner': {'default_class': 'prefect.engine.task_runner.TaskRunner'}},'user_config_path': './config.toml'}>

因此,config.toml变量不会在第二种情况下加载

有什么想法吗?

(应用程序:我想在源控制中隐藏的本地config.toml文件中设置“完美”机密)

解决方法

您是否有理由要在当前工作目录中使用config.toml文件?用户配置文件的默认位置为~/.prefect/config.toml,因此,如果将配置放在此处,它将无需任何其他设置即可工作。

如果确实需要在当前工作目录中使用配置文件,则可以尝试将export语句添加到~/.bashrc(或您可能需要的任何等效的shell)中,以便它始终在您的环境中

,

这有点小技巧 - python-dotenv 可用于为特定于目录的配置设置本地 env 文件(此处称为 .prefect 而不是 .env):

$cat .prefect
PREFECT__FLOWS__CHECKPOINTING=True
>> import os
>> from dotenv import load_dotenv
>> load_dotenv(".prefect")
True
>> os.getenv("PREFECT__FLOWS__CHECKPOINTING")
"True"
>> import prefect; prefect.context.config.flows["checkpointing"]
True

警告:在导入 load_dotenv(".prefect") 之前必须调用 prefect

import dotenv
dotenv.load_dotenv(".prefect")
import prefect

或者 .prefect 可以链接到本地​​ user configuration file