创建一个最小化的Kedro项目¶
本文档旨在解释一个基础Kedro项目的核心组成部分。虽然大多数用户通常从项目模板开始或基于现有Python项目进行改造,但本指南将从空白项目起步,逐步引入必要元素。这将帮助您理解核心概念,并学会如何根据具体需求进行定制。
Kedro项目的核心组件¶
Kedro 是一个专为创建可复现数据科学代码而设计的 Python 框架。典型的 Kedro 项目包含两个部分:强制结构和推荐项目结构。
1. 推荐结构¶
Kedro项目遵循特定的目录结构,以促进协作和维护的最佳实践。默认结构包括:
目录/文件 |
描述 |
|---|---|
|
包含配置文件,例如 |
|
本地项目数据,通常不会提交到版本控制中。 |
|
项目文档文件。 |
|
用于实验和原型设计的Jupyter笔记本。 |
|
项目的源代码,包括流水线和节点。 |
|
项目概览与操作指南。 |
|
关于项目的元数据,包括依赖项。 |
|
指定Git应忽略的文件和目录。 |
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.py和pipeline_registry.py的位置。
settings.py¶
settings.py 文件是 Kedro 项目中的一个重要配置文件,允许您为项目定义各种设置和钩子。以下是其用途和功能的概述:
项目设置:该文件用于配置项目范围的设置,例如定义日志级别、设置环境变量或指定数据和输出的路径。
钩子注册:您可以在
settings.py中注册自定义钩子,这些钩子函数可以在Kedro流水线生命周期的特定点执行(例如在节点运行前后)。这对于添加额外功能(如日志记录或监控)非常有用。插件集成:如果您正在使用Kedro插件,
settings.py文件也可用于对它们进行适当配置。
即使您没有任何设置,仍然需要一个空的settings.py文件。通常这些文件存储在src/路径下。
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.py 和 pipeline_registry.py¶
接下来,创建一个名为minikedro的文件夹,该名称应与pyproject.toml中定义的package_name保持一致:
mkdir minikedro
在此文件夹内,创建两个空文件:settings.py 和 pipeline_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的配置文件夹,以及两个分别称为base和local的环境。
要解决这个问题,请将以下两行添加到settings.py中:
CONF_SOURCE = "."
CONFIG_LOADER_ARGS = {"base_env": ".", "default_run_env": "."}
这些行覆盖了默认设置,以便Kedro知道在当前目录而非预期的conf文件夹中查找配置。更多详情,请参阅如何更改配置源文件夹的设置以及无需完整Kedro项目的高级配置
现在,再次运行管道:
kedro run
您应该能看到流水线成功运行!
结论¶
Kedro通过其组件和目录结构,提供了一种结构化方法来开发数据管道,实现关注点的清晰分离。按照上述步骤操作,您可以建立一个基础的Kedro项目,为更复杂的数据处理工作流奠定基础。本指南阐述了Kedro项目的核心概念。如果您已有Python项目并希望集成Kedro,这些概念将帮助您根据自身需求进行调整和适配。