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

How to permanently set a local Prefect config file?

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

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

(from docs) "The configuration file is parsed when Prefect is first imported and is available as a live object in 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 文件中设置一个 'Prefect' 秘密,从源代码管理中隐藏)

您是否需要将 config.toml 文件放在当前工作目录中?用户配置文件的默认位置是 ~/.prefect/config.toml,因此如果您将配置放在那里,它无需额外设置即可工作。

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

这有点 hack - 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

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

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

或者 .prefect 可以 link 到本地 user configuration file