创建一个最小化的Kedro项目

本文档旨在解释一个基础Kedro项目的核心组成部分。虽然大多数用户通常从项目模板开始或基于现有Python项目进行改造,但本指南将从空白项目起步,逐步引入必要元素。这将帮助您理解核心概念,并学会如何根据具体需求进行定制。

Kedro项目的核心组件

Kedro 是一个专为创建可复现数据科学代码而设计的 Python 框架。典型的 Kedro 项目包含两个部分:强制结构推荐项目结构

2. 必需文件

要使一个项目被识别为Kedro项目并支持运行kedro run,它必须包含三个基本文件:

  • pyproject.toml: 定义Python项目

  • settings.py: 定义项目设置,包括库组件注册。

  • pipeline_registry.py: 用于注册项目的流水线。

如果想查看这些文件的示例,你可以使用kedro new创建一个项目,或者查看GitHub上的项目模板

pyproject.toml

pyproject.toml文件是Kedro项目中的关键组成部分,作为存储Python项目构建元数据和工具设置的标准方式。它对于定义项目配置以及确保与各种工具和库的正确集成至关重要。

特别是,Kedro要求在pyproject.toml文件中包含[tool.kedro]部分,这部分描述了项目中的项目元数据

通常,它看起来类似这样:

[tool.kedro]
package_name = "package_name"
project_name = "project_name"
kedro_init_version = "kedro_version"
tools = ""
example_pipeline = "False"
source_dir = "src"

这告诉Kedro在哪里查找源代码,settings.pypipeline_registry.py的位置。

settings.py

settings.py 文件是 Kedro 项目中的一个重要配置文件,允许您为项目定义各种设置和钩子。以下是其用途和功能的概述:

  • 项目设置:该文件用于配置项目范围的设置,例如定义日志级别、设置环境变量或指定数据和输出的路径。

  • 钩子注册:您可以在settings.py中注册自定义钩子,这些钩子函数可以在Kedro流水线生命周期的特定点执行(例如在节点运行前后)。这对于添加额外功能(如日志记录或监控)非常有用。

  • 插件集成:如果您正在使用Kedro插件,settings.py文件也可用于对它们进行适当配置。

即使您没有任何设置,仍然需要一个空的settings.py文件。通常这些文件存储在src//settings.py路径下。

pipeline_registry.py

pipeline_registry.py 文件对于管理您的Kedro项目中的流水线至关重要。它提供了一种集中式方法来注册和访问项目中定义的所有流水线。以下是其主要功能:

  • 流水线注册:该文件必须包含一个名为register_pipelines()的顶层函数,该函数返回从流水线名称到流水线对象的映射。此函数至关重要,因为它使Kedro CLI和其他工具能够发现并运行已定义的流水线。

  • 管道的自动发现:从Kedro 0.18.3版本开始,您可以使用find_pipeline函数自动发现项目中定义的管道,无需在每次创建新管道时手动更新注册表。

逐步创建一个最小化的Kedro项目

本指南将引导您完成创建一个最小化Kedro项目的过程,仅需三个文件即可成功运行kedro run

步骤1:安装Kedro

首先,确保您的机器上已安装Python。然后,使用pip安装Kedro:

pip install kedro

步骤2:创建一个新的Kedro项目

为您的项目创建一个新目录:

mkdir minikedro

进入您新创建的项目目录:

cd minikiedro

步骤3:创建 pyproject.toml

在项目目录中创建一个名为pyproject.toml的新文件,内容如下:

[tool.kedro]
package_name = "minikedro"
project_name = "minikedro"
kedro_init_version = "0.19.9"
source_dir = "."

此时,你的工作目录应该如下所示:

.
├── pyproject.toml

注意

注意我们定义了source_dir = ".",通常我们会将源代码保存在名为src的目录中。在本示例中,我们尽量保持结构简单,因此将源代码保留在根目录下

步骤4: 创建 settings.pypipeline_registry.py

接下来,创建一个名为minikedro的文件夹,该名称应与pyproject.toml中定义的package_name保持一致:

mkdir minikedro

在此文件夹内,创建两个空文件:settings.pypipeline_registry.py

touch minikedro/settings.py minikedro/pipeline_registry.py

现在你的工作目录应该如下所示:

.
├── minikedro
│   ├── pipeline_registry.py
│   └── settings.py
└── pyproject.toml

尝试在终端中运行以下命令:

kedro run

您会遇到一个错误提示,指出pipeline_registry.py文件为空:

AttributeError: module 'minikedro.pipeline_registry' has no attribute 'register_pipelines'

步骤5:创建一个简单的Pipeline

要解决此问题,请将以下代码添加到pipeline_registry.py中,该文件定义了一个要运行的简单管道:

from kedro.pipeline import pipeline, node

def foo():
    return "dummy"

def register_pipelines():
    return {"__default__": pipeline([node(foo, None, "dummy_output")])}

如果你尝试再次使用kedro run运行管道,将会看到另一个错误:

MissingConfigException: Given configuration path either does not exist or is not a valid directory: /workspace/kedro/minikedro/conf/base

步骤6:定义项目设置

出现此错误是因为Kedro需要一个名为conf的配置文件夹,以及两个分别称为baselocal的环境。

要解决这个问题,请将以下两行添加到settings.py中:

CONF_SOURCE = "."
CONFIG_LOADER_ARGS = {"base_env": ".", "default_run_env": "."}

这些行覆盖了默认设置,以便Kedro知道在当前目录而非预期的conf文件夹中查找配置。更多详情,请参阅如何更改配置源文件夹的设置以及无需完整Kedro项目的高级配置

现在,再次运行管道:

kedro run

您应该能看到流水线成功运行!

结论

Kedro通过其组件和目录结构,提供了一种结构化方法来开发数据管道,实现关注点的清晰分离。按照上述步骤操作,您可以建立一个基础的Kedro项目,为更复杂的数据处理工作流奠定基础。本指南阐述了Kedro项目的核心概念。如果您已有Python项目并希望集成Kedro,这些概念将帮助您根据自身需求进行调整和适配。