Kedro 项目设置(Project Settings)完全指南:settings.py 与 pyproject.toml 配置深度解析 📅 发布时间:2026/9/15 10:51:35 👁 浏览次数: Kedro 项目设置Project Settings完全指南settings.py 与 pyproject.toml 配置深度解析【免费下载链接】kedroKedro is a toolbox for production-ready data science. It uses software engineering best practices to help you create data engineering and data science pipelines that are reproducible, maintainable, and modular.项目地址: https://gitcode.com/GitHub_Trending/ke/kedro导读Kedro 项目的settings.py文件承载着整个项目的应用设置包括 Hooks 注册、Session 管理、配置加载器、Data Catalog 实现类等核心组件而pyproject.toml中的[tool.kedro]段则定义了项目元数据与构建信息。本文以官方文档 docs/tutorials/settings.md 为主线结合 Kedro 框架源码kedro/framework/project/__init__.py、kedro/framework/session/session.py等与项目模板kedro/templates/project/逐一讲解每个设置项的默认值、作用与底层实现帮助你在不修改框架代码的前提下通过声明式配置自定义 Kedro 项目的运行时行为。一、Application settings 是什么Kedro 项目根目录下位于src/python_package/settings.py的settings.py文件保存了项目的应用设置。它的作用范围是整个项目的运行时行为包括注册项目级 Hooks钩子指定 Kedro 库组件的实现类Session、Context、ConfigLoader、DataCatalog控制数据集校验、Runner 安全策略等特性开关。官方文档特别强调应用设置与两类内容不同概念位置用途应用设置Application settingssettings.py运行时行为与运行环境无关运行时配置Runtime configurationconf/目录按环境base / local 等变化参见 configuration_basics项目元数据Project metadatapyproject.toml的[tool.kedro]构建元数据与工具配置默认情况下settings.py中所有代码均以注释形式存在。当某个设置未被提供时Kedro 会选择合理的默认值只有当你需要改变默认行为时才取消注释并编辑该文件。从源码看默认值并非魔法数字而是集中定义在_ProjectSettings继承自 Dynaconf 的LazySettings中的一系列 Validator 里见 kedro/framework/project/init.py。下面将逐一对照。二、设置项完整表格默认值 用途下表整理自官方文档并补充了当前仓库源码中实际使用的默认值设置项默认值用途HOOKStuple()通过项目 Hooks 在执行时间线上注入额外行为DISABLE_HOOKS_FOR_PLUGINStuple()禁用插件自动注册的 HooksSESSION_CLASSkedro.framework.session.KedroSession自定义 Kedro Session 的处理方式SESSION_STORE_CLASSkedro.framework.session.session.BaseSessionStore自定义 Session 数据 的存储方式SESSION_STORE_ARGSdict()传给SESSION_STORE_CLASS构造器的关键字参数CONTEXT_CLASSkedro.framework.context.KedroContext自定义 Kedro 库组件的管理方式CONF_SOURCEconf存放配置的目录CONFIG_LOADER_CLASSkedro.config.OmegaConfigLoader自定义项目配置的加载方式CONFIG_LOADER_ARGS{base_env: base, default_run_env: local}传给CONFIG_LOADER_CLASS构造器的关键字参数DATA_CATALOG_CLASSkedro.io.DataCatalog自定义 Data Catalog 的处理方式DATASET_VALIDATIONTrue控制项目级数据集校验开关RUNNER_MODULE_ALLOWLISTtuple()允许 HTTP server 额外导入 runner 的模块前缀白名单值得注意的差异官方文档表格中写的是CONFIG_LOADER_CLASS默认kedro.config.ConfigLoader、CONFIG_LOADER_ARGS默认dict()但当前仓库源码 kedro/framework/project/init.py 中的实际默认值分别是kedro.config.OmegaConfigLoader和{base_env: base, default_run_env: local}。以源码为准本文按仓库实际行为描述。三、逐项深入每个设置项如何影响 Kedro 运行时3.1HOOKS注册项目级钩子HOOKS接受一个已实例化的 Hook 对象元组例如在项目中创建hooks.py并定义ProjectHooks类后# settings.py from my_package.hooks import ProjectHooks HOOKS (ProjectHooks(),)项目模板 settings.py 中的注释说明了两个要点Hooks 按LIFO后进先出顺序执行需要传入的是实例而非类ProjectHooks()。在KedroSession.__init__中这些 Hooks 会被注册进 hook managerhook_manager _create_hook_manager() _register_hooks(hook_manager, settings.HOOKS) _register_hooks_entry_points(hook_manager, settings.DISABLE_HOOKS_FOR_PLUGINS)见 kedro/framework/session/session.py。3.2DISABLE_HOOKS_FOR_PLUGINS屏蔽插件的自动 Hook 注册Kedro 会通过kedro.hooksentry point 自动加载已安装插件如 kedro-viz的 Hooks注册逻辑位于 kedro/framework/hooks/manager.py。若某个插件的 Hooks 对你的项目有害或无意义可将其包名加入白名单DISABLE_HOOKS_FOR_PLUGINS (kedro-viz,)3.3SESSION_CLASS/SESSION_STORE_CLASS/SESSION_STORE_ARGS定制 Session 与持久化SESSION_CLASS控制KedroSession的实现SESSION_STORE_CLASS控制 session 元数据如用户名、git 信息、CLI 上下文、运行参数的存储方式默认是BaseSessionStore可将数据写入sessions目录。SESSION_STORE_ARGS会作为关键字参数传给 store 构造器。从_init_store()的源码kedro/framework/session/session.py可以看到若未显式提供path默认使用(project_path / sessions)session_id会被自动注入传入的构造参数不合法时会抛出ValueError并提示Store config must only contain arguments valid for the constructor。例如自定义 store 路径SESSION_STORE_CLASS BaseSessionStore SESSION_STORE_ARGS { path: ./sessions }此外源码用_IsSubclassValidator校验SESSION_STORE_CLASS必须是BaseSessionStore的子类用_HasSharedParentClassValidator校验SESSION_CLASS必须继承自KedroSession的直接父类否则会在加载设置时直接报错见 kedro/framework/project/init.py。3.4CONF_SOURCE配置目录位置CONF_SOURCE指定运行时配置所在目录默认是项目根目录下的conf。它被多处底层代码引用配置加载器据此拼接配置路径conf_path str(project_path / settings.CONF_SOURCE)kedro/config/omegaconf_config.pySession 构造时同样用它解析配置源self._conf_source conf_source or str(self._project_path / settings.CONF_SOURCE)kedro/framework/session/session.pyCLI 的 pipeline / catalog 命令也读取它kedro/framework/cli/pipeline.py。3.5CONFIG_LOADER_CLASS/CONFIG_LOADER_ARGS配置加载器定制默认使用OmegaConfigLoader基于 OmegaConf它支持变量插值variable interpolation官方建议用它替代 YAML anchors。项目模板默认携带CONFIG_LOADER_ARGS { base_env: base, default_run_env: local, # config_patterns: { # spark : [spark*/], # parameters: [parameters*, parameters*/**, **/parameters*], # } }base_env/default_run_env指定基础环境目录base与默认运行环境目录localconfig_patterns用于自定义各类配置文件的 glob 匹配模式例如上面示例中为 Spark 配置和 parameters 配置自定义了搜索路径。加载时Kedro 会先处理base目录再按env指定的子目录叠加当同一顶层 key 在不同目录的配置文件中出现时后处理的配置路径优先覆盖子键详见 kedro/config/omegaconf_config.py 的类注释。3.6CONTEXT_CLASS管理库组件CONTEXT_CLASS默认是KedroContext负责在运行期间协调 ConfigLoader、DataCatalog、参数与凭据等库组件。Session 创建 context 时使用settings.CONTEXT_CLASSkedro/framework/session/session.py。若要替换为自定义 Context需要继承KedroContext。3.7DATA_CATALOG_CLASSData Catalog 实现默认使用kedro.io.DataCatalog。源码通过_ImplementsCatalogProtocolValidator校验该设置值实例化后必须实现CatalogProtocol见 kedro/framework/project/init.py。这样你可无缝替换为SharedMemoryDataCatalog等实现了同一协议的自定义类而无需改动 Session 逻辑。3.8DATASET_VALIDATION数据集校验开关布尔值默认True。关闭方式DATASET_VALIDATION False其实现位于KedroContext._configure_dataset_validationkedro/framework/context/context.py若 catalog 类实现了validation_enabled属性则直接把该设置值写入若 catalog 类不支持校验而设置又为True且目录配置中声明了validator键则发出告警提示这些校验器会被忽略开启时若存在校验器规格还会执行preflight_check预检并输出警告。从源码注释kedro/framework/project/init.py可以看出目前该设置只支持布尔值warn/strict模式属于规划中的后续功能。3.9RUNNER_MODULE_ALLOWLISTHTTP Server 的 Runner 安全白名单该设置服务于 Kedro 的 HTTP server。为了安全server 默认只允许从kedro.runner和项目包名中导入 runner如果你需要在 HTTP API 中指定运行在其它模块如第三方库的 runner就必须将其模块前缀加入白名单。相关实现见 kedro/server/http_server.py源码会把[kedro.runner, package_name, *settings.RUNNER_MODULE_ALLOWLIST]作为允许导入的模块列表并明确提示只有通过RUNNER_MODULE_ALLOWLIST在 settings.py 中声明的模块才被允许。四、settings 的加载与校验机制源码级原理4.1 基于 Dynaconf 的 LazySettings_ProjectSettings继承自 Dynaconf 的LazySettings所有设置通过 Validator 声明默认值与校验规则见 kedro/framework/project/init.py。三套校验器各司其职校验器校验对象规则_IsSubclassValidatorCONTEXT_CLASS、SESSION_STORE_CLASS必须是默认类的子类_HasSharedParentClassValidatorSESSION_CLASS、CONFIG_LOADER_CLASS默认类的直接父类必须是设置值的祖先_ImplementsCatalogProtocolValidatorDATA_CATALOG_CLASS实例化后必须实现CatalogProtocol这意味着如果你在settings.py中写入一个不合规的类引用Kedro 会在启动阶段就抛出ValidationError而不是在运行中才失败。4.2 项目配置化configure_projectconfigure_project(package_name)kedro/framework/project/init.py是连接settings.py与框架的关键入口它依次完成加载package_name.settings模块并应用设置配置package_name.pipeline_registry作为 pipelines 注册模块记录全局PACKAGE_NAME为项目包名注册INFO级别的 logger。4.3 提前校验validate_settingsvalidate_settings()kedro/framework/project/init.py会在KedroSession.create()时被调用kedro/framework/session/session.py目的是尽早暴露 settings 模块的语法或导入错误。若settings.py不存在会输出警告No settings.py found, defaults will be used.并回退到默认值。这避免了 Dynaconf 静默吞掉导入错误、最终只抛出晦涩的Expected an instance of ConfigLoader, got NoneType这类问题。五、项目元数据pyproject.toml 的[tool.kedro]段pyproject.toml是 Python 项目存储构建元数据与工具设置的标准方式。每个 Kedro 项目在根目录都会自带一份预填充的pyproject.toml其中[tool.kedro]段包含以下键示例来自项目模板 pyproject.toml[tool.kedro] package_name package_name project_name project_name kedro_init_version kedro_version tools example_pipeline False source_dir src键说明package_name项目 Python 包的名称必须是合法的 Python 包名必填project_name人类可读的项目显示名必填kedro_init_version创建项目时使用的 Kedro 版本升级 Kedro 后应同步更新该值tools创建项目时选择的工具集如pytest、ruff等模板中以 cookiecutter 变量写入example_pipeline是否生成示例流水线模板默认Falsesource_dir源码目录默认src除了[tool.kedro]pyproject.toml还可以存放其它工具的配置。项目模板中同时预置了[tool.pytest.ini_options]自动附加--cov覆盖率参数、[tool.coverage.report]与[tool.ruff]行宽 88、规则集 F/W/E/I/UP/PL 等等段落可与自动化测试配合使用。其它工具的具体配置方式请查阅各自文档。六、不依赖src目录改用 flat layoutKedro 默认使用src目录布局src/package_name/下放置包代码但你完全可以切换到 Python 生态中的 flat layout。只需修改pyproject.toml source_dir --- source_dir src将source_dir置空后项目包直接位于根目录下。同时[tool.setuptools.packages.find]的where也应相应调整模板默认where [src]确保打包工具能找到你的包。此改动影响构建打包与 Kedro 的包发现逻辑改完后建议重新运行kedro package验证。七、实践建议与排查要点默认值即可覆盖绝大多数场景模板生成的settings.py全部注释Kedro 的默认值经过精心设计除非确有定制需求否则无需改动。修改后立即生效settings.py属于 Python 模块无需编译但注意_ProjectSettings是惰性加载的若在长驻进程如 HTTP server、FastAPI 应用中反复调用configure_project()可使用preserve_loggingTrue避免运行时附加的日志处理器被覆盖见 kedro/framework/project/init.py。留意类继承约束替换SESSION_CLASS、CONTEXT_CLASS、CONFIG_LOADER_CLASS、DATA_CATALOG_CLASS时务必让自定义类继承默认类的父类或实现对应协议否则会在启动阶段被 Validator 拦截。区分三类配置运行时配置conf/、应用设置settings.py、项目元数据pyproject.toml三者职责不同不要混用——例如不要把环境相关的路径写进settings.py。版本升级联动升级 Kedro 后记得同步更新pyproject.toml中的kedro_init_version以便工具准确识别项目初始化版本。通过本文的设置项说明与源码印证你现在可以精准地定制 Kedro 项目的 Hooks 注册、Session 存储、配置加载、Data Catalog、数据集校验等运行时行为并在pyproject.toml中正确管理项目元数据与构建布局。【免费下载链接】kedroKedro is a toolbox for production-ready data science. It uses software engineering best practices to help you create data engineering and data science pipelines that are reproducible, maintainable, and modular.项目地址: https://gitcode.com/GitHub_Trending/ke/kedro创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考