问题描述
根据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