1

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

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

(来自文档)“配置文件在 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文件中设置一个“完美”秘密,隐藏在源代码管理中)

4

2 回答 2

1

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

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

于 2020-08-26T16:59:53.867 回答
0

这有点小技巧 - 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可以链接到本地​​用户配置文件

于 2021-07-20T13:54:47.057 回答