创建一个Kedro启动项目¶
Kedro starters是一种创建新项目的实用方式,这些项目包含可直接运行的代码,或可供调整和扩展。
团队可能会发现构建Kedro启动器很有用,这样可以创建可重用的项目,这些项目基于通用基础并能进行扩展。
请注意,用户需要安装Git才能使用本节中涉及的kedro new流程。
自定义项目创建变量¶
当你使用Kedro starter创建新项目时,kedro new会提示你输入项目名称。这个变量(project_name)是在default starter setup中的prompts.yml文件里设置的。
Kedro 会根据输入的 project_name 自动生成以下两个变量:
repo_name- 用于存放项目仓库的目录名称python_package- 项目包的Python包名称(参见Python包命名规范)
作为初学者创建者,您可以通过在模板根目录的prompts.yml文件中添加自定义提示来定制由kedro new触发的提示。以下是一个自定义提示的示例:
custom_prompt:
title: "Prompt title"
text: |
Prompt description that explains to the user what
information they should provide.
至少需要为提示定义title才能使提示有效。Kedro接收到用户对每个提示的输入后,会将值传递给Cookiecutter,因此prompts.yml中的每个键都必须在cookiecutter.json中有对应的键。
如果需要对提示输入进行验证,例如确保仅包含字母数字字符,可以通过regex_validator键添加正则表达式验证规则。对于更复杂的验证,建议使用cookiecutter生成前后钩子。
如果希望cookiecutter在用户未提供任何输入时能提供合理的默认值,可以将这些默认值添加到cookiecutter.json中。请参考默认启动模板中的cookiecutter.json作为示例。
Kedro 入门示例¶
要查看一个Kedro入门示例,请查看spaceflights-pandas starter on GitHub。
当使用kedro new --starter=spaceflights-pandas命令创建新的spaceflights-pandas项目时,系统会要求用户输入project_name变量,该变量默认将用于生成repo_name和python_package变量。
如果使用配置文件,必须在文件中提供所有三个变量。您可以通过检查模板来查看这些变量的使用方式:
project_name¶
可读性强的 project_name 变量用于新项目的 README.md 文件中。
repo_name¶
标记为{{ cookiecutter.repo_name }}的顶级文件夹,在创建启动项目时作为包含该项目的顶级文件夹。
python_package¶
在父文件夹中,src子文件夹内有一个可配置变量{{ cookiecutter.python_package }},其中包含示例管道的源代码。该变量也在__main__.py中使用。
以下是项目作为Cookiecutter模板的布局结构:
{{ cookiecutter.repo_name }} # Parent directory of the template
├── conf # Project configuration files
├── data # Local project data (not committed to version control)
├── docs # Project documentation
├── notebooks # Project related Jupyter notebooks (can be used for experimental code before moving the code to src)
├── pyproject.toml #
├── README.md # Project README
├── requirements.txt
└── src # Project source code
└── {{ cookiecutter.python_package }}
├── __init.py__
├── pipelines
├── pipeline_registry.py
├── __main__.py
└── settings.py
└── tests
扩展启动器别名¶
你可以通过使用kedro.starters入口点创建插件来添加别名,这样就能调用kedro new --starter=your_starters。也就是说,可以直接通过kedro new中的starter参数使用,而无需显式提供template和directory参数。
自定义启动别名与官方Kedro启动别名的工作方式相同,并且也能通过命令kedro starter list识别。
你需要通过提供KedroStarterSpec列表来扩展启动器,在这个示例中它被定义在一个名为plugin.py的文件中。
非Git仓库启动器示例:
# plugin.py
starters = [
KedroStarterSpec(
alias="test_plugin_starter",
template_path="your_local_directory/starter_folder",
)
]
Git 仓库入门示例:
# plugin.py
starters = [
KedroStarterSpec(
alias="test_plugin_starter",
template_path="https://github.com/kedro-org/kedro-starters/",
directory="spaceflights-pandas",
)
]
directory参数是可选的,当您在一个代码库中有多个模板时(例如官方kedro-starters)应该使用它。如果只有一个模板,则顶层目录将被视为模板。
在你的pyproject.toml文件中,需要将规范注册到kedro.starters:
[project.entry-points."kedro.starters"]
starter = "plugin:starters"
之后你可以使用这个starter通过kedro new --starter=test_plugin_starter命令。
注意
如果您的项目模板存储在git仓库中,Kedro默认会使用与您当前Kedro版本对应的标签或分支,例如0.18.12。这意味着您可以在同一个仓库中托管不同版本的项目模板,系统会自动选择正确的版本。如果您不想遵循这种结构,可以通过checkout标志来覆盖此行为,例如kedro new --starter=test_plugin_starter --checkout=main。