如何永久设置本地 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
根据 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