ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

使用 kedro new 创建新 Kedro 项目:交互式向导、工具选择与源码级解析

使用 kedro new 创建新 Kedro 项目:交互式向导、工具选择与源码级解析 使用 kedro new 创建新 Kedro 项目交互式向导、工具选择与源码级解析【免费下载链接】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 中创建新项目的核心命令kedro new从交互式问答项目名称、工具选择、示例管线、遥测同意到单行非交互式命令再到 YAML 配置文件方式并结合当前仓库源码starters.py、prompts.yml、cookiecutter.json解析每一步背后的校验逻辑、命名推导规则与示例选择机制。读完本文你将能够熟练创建基础 Kedro 项目、按需装配 lint/test/log/docs/data/pyspark 等工具并理解生成项目的目录骨架。Introducingkedro newkedro new是创建 Kedro 项目的入口命令。要创建一个包含默认代码用于搭建你自己的节点与管线的基础 Kedro 项目只需导航到目标目录并执行uvx kedro new说明使用uvx可以在不把 Kedro 安装进系统或虚拟环境的情况下运行它——uvx每次都会在一个干净的临时环境中下载并运行 Kedro。如果你更倾向标准安装方式例如 pip 虚拟环境可参考安装指南。需要特别注意的是kedro new流程依赖Git已安装——因为创建过程中需要从模板仓库拉取对应的 starter 模板这一点从源码中_get_cookiecutter_dir使用cookiecutter.repository.determine_repo_dir克隆远程模板仓库的实现可以印证。从底层实现看kedro new最终会调用 starters.py 中的new命令click.command装饰、--config/--starter/--checkout/--directory/--name/--tools/--example/--telemetry等选项均在 starters.py#L295-L330 定义随后基于 cookiecutter.json 和 prompts.yml 生成extra_context最终调用 cookiecutter 渲染出项目目录。项目名称Project nameCLI 首先询问项目的人类可读名称human-readable name它允许包含字母数字符号、空格、下划线和连字符且长度至少为 2 个字符。该名称会被保存为project_name同时 Kedro 会基于它自动推导仓库目录名repo_name和 Python 包名python_package。例如输入Get Started描述配置项示例新项目的人类可读名称project_nameGet Started存放项目的本地目录repo_nameget-started项目的 Python 包名短、全小写python_packageget_started这种推导关系在仓库中可以直接验证模板 cookiecutter.json 中定义了{ project_name: New Kedro Project, repo_name: {{ cookiecutter.project_name.strip().replace( , -).replace(_, -).lower() }}, python_package: {{ cookiecutter.project_name.strip().replace( , _).replace(-, _).lower() }}, ... }而 starters.py#L189-L192 中的_derive_package_name函数与模板保持一致的变换规则去空格、-/ 替换为_、转小写。包名冲突校验拒绝与 Python 关键字 / 标准库重名如果一个名称推导出的包名恰好是 Python 关键字或标准库模块名例如email、json、import项目将被拒绝创建。原因在 starters.py#L195-L213 的_validate_package_name_is_importable中有明确注释kedro new会通过package.pipeline_registry来导入生成的项目如果包名遮蔽了email、json等标准库模块或本身就是关键字后续kedro run会以令人困惑的ModuleNotFoundError失败因此在创建时就拦截。对应测试在 test_new_from_cli_flags.py#L174-L208 中email、json、string、JSON、import会被拒绝而仅仅“包含”标准库子串的email-service、my-json-app、import_data因推导出的包名合法而被允许。项目工具Project tools接下来 CLI 会询问要为项目装配哪些工具Tools 1) Lint: Basic linting with ruff 2) Test: Basic testing with pytest 3) Log: Additional, environment-specific logging options 4) Docs: A Sphinx documentation setup 5) Data Folder: A folder structure for data management 6) PySpark: Configuration for working with PySpark Which tools would you like to include in your project? [1-6/1,3/all/none]: (none):各工具的详细说明见新项目工具文档。交互式输入的语法可以用逗号分隔值(1,2,4)、范围值(1-3,5-7)、两者组合(1,3-5,7)也可以直接输入关键字all或none。直接回车跳过提示默认为none。这些语法由 starters.py#L926-L971 的_parse_tools_input解析支持范围展开、校验范围起止大小、防止超大区间并由_validate_tool_selection校验数字合法性。使用--tools标志跳过交互非交互方式按名称指定工具例如uvx kedro new --toolslint,test uvx kedro new --toolsall uvx kedro new --toolsnone可选的工具名有lint、test、log、docs、data、pyspark交互提示中的数字选择仅用于回答提示时。名称到数字的映射关系定义在 starters.py#L122-L141lint→1、test→2、log→3、docs→4、data→5、pyspark→6。--tools的值会先经_validate_selected_tools校验all/none不能与其他选项混用再经_convert_tool_short_names_to_numbers转为数字、去重、排序最终由_convert_tool_numbers_to_readable_names转回可读名称字符串写入extra_context。也可以通过kedro new --help查看完整的工具说明。项目示例Project examplesCLI 会询问是否包含示例管线代码Would you like to include an example pipeline? : (no):回答yes时示例内容取决于之前选择的工具spaceflights-pandasstarter当你选择了 linting、testing、自定义日志、文档、数据结构中的任意组合且未同时选择 PySpark时添加。spaceflights-pysparkstarter当你选择了 PySpark 并搭配其他任意工具时添加。这一选择逻辑的源码实现在 starters.py#L846-L873当工具列表中出现PySpark时使用spaceflights-pyspark否则当example_pipeline True时使用spaceflights-pandas两者皆非则使用本地默认模板路径TEMPLATE_PATH即kedro/templates/project。每个 starter 示例都针对所选工具的能力与集成做了裁剪能直观展示这些工具在真实项目中的用法。官方 starter 的别名注册见 starters.py#L107-L120astro-airflow-iris、spaceflights-pandas、spaceflights-pyspark、databricks-iris、support-agent-langgraph。Quickstart 示例以下三个速查用例分别对应交互式多步输入与等价的一行命令。1. 创建一个名为My-Project的默认项目无工具、无示例代码kedro new ⮐ My-Project ⮐ none ⮐ no ⮐等价一行命令uvx kedro new --nameMy-Project --toolsnone --examplen2. 创建一个名为spaceflights的项目含测试工具与示例代码kedro new ⮐ spaceflights ⮐ 2 ⮐ yes ⮐等价一行命令uvx kedro new --namespaceflights --toolstest --exampley3. 创建一个名为testproject的项目含 lint、docs、PySpark无示例代码kedro new ⮐ testproject ⮐ 1,4,6 ⮐ no ⮐等价一行命令uvx kedro new --nametestproject --toolslint,docs,pyspark --examplen快捷标志--name、--tools、--example均可单独用来跳过对应的交互步骤。例如uvx kedro new --namespaceflights只跳过名称提问uvx kedro new --exampley直接决定是否包含示例代码。使用 YAML 配置文件创建项目作为交互式流程的替代你可以用 YAML 配置文件向kedro new提供全部取值。参考文件config.yml# config.yml project_name: My Project repo_name: my-project python_package: my project tools: lint, test, log, docs, data, pyspark example_pipeline: y然后执行uvx kedro new --configpath/to/config.yml注意事项使用配置文件时必须提供project_name、repo_name、python_package三个值源码_validate_config_file_against_prompts会基于 prompts.yml 校验缺失的必填键tools与example_pipeline可选缺省时分别默认none与no。当--config与--name、--tools、--example同时使用时CLI 上的值会覆盖配置文件中的值见_get_extra_context中selected_tools/project_name/example_pipeline对extra_context的覆盖逻辑starters.py#L634-L641。配置文件中的tools也接受工具短名列表如lint, test, log, docs, data, pysparkexample_pipeline接受y/yes/n/no大小写不敏感文件解析时_parse_yes_no_to_bool会将其转为布尔字符串。遥测同意Telemetry consent--telemetry标志用于在创建项目的瞬间注册用户分析数据的同意状态从而绕过首次在项目内执行kedro命令时才会出现的分析收集提示。若不使用该标志则照常提示。uvx kedro new --telemetryyes # 同意收集 uvx kedro new --telemetryno # 不同意收集取值yes或y表示同意no或n表示拒绝该参数在 starters.py#L324-L330 中被定义为click.Choice([yes, no, y, n], case_sensitiveFalse)。同意结果会写入生成项目根目录下的.telemetry文件内容形如consent: true/false由_create_project在 cookiecutter 渲染完成后落盘starters.py#L994-L996。对应测试见 test_new_from_cli_flags.py#L211-L240其中--telemetryYES/y/Y等大小写变体均会生成.telemetry文件。各工具能为项目带来什么在创建时选中的工具会直接改变生成项目的结构与依赖。以下是逐项说明详见新项目工具文档。LintingRuff将ruff加入项目依赖并在pyproject.toml中预置默认配置#pyproject.toml line-length 88 show-fixes true select [ F, # Pyflakes W, # pycodestyle E, # pycodestyle I, # isort UP, # pyupgrade PL, # Pylint T201, # Print Statement ] ignore [E501] # Ruff format takes care of line-too-long安装依赖后即可格式化与检查代码uv pip install -r requirements.txt ruff format path/to/project/root ruff check path/to/project/root更多内容可参考 linting 文档。Testingpytest引入tests目录内含示例单元测试test_run.py并把pytest加入依赖uv pip install -r requirements.txt pytest path/to/your/project/root/tests预置的 pytest 配置来自模板中的pyproject.toml[tool.pytest.ini_options] addopts --cov-report term-missing \ --cov src/{{ cookiecutter.python_package }} -ra [tool.coverage.report] fail_under 0 show_missing true exclude_lines [pragma: no cover, raise NotImplementedError]参考自动化测试文档了解更多。Custom logging在项目的conf目录引入logging.yml提供console与info_file_handler两个额外 handler默认配置为rich与info_file_handler取代 Kedro 的默认日志配置。使用时需设置环境变量export KEDRO_LOGGING_CONFIGconf/logging.yml详见 logging 文档。DocumentationSphinx在项目结构中新增docs目录包含 Sphinx 配置conf.py与index.rst支持自动生成 HTML 文档。测试 test_new_from_cli_flags.py#L53-L79 验证了生成docs/Makefile、make.bat、source/conf.py、source/index.rst以及.gitignore中docs/build/等条目。Data structure提供本地标准化的数据文件夹层级如原始、中间、处理后数据。如果要包含示例管线此工具不能省略。Kedro 的能力不止于本地存储通过 fsspec 兼容路径还可对接数据湖与各类数据库。目录结构约定可参见 kedro_concepts 文档。PySpark修改requirements.txt加入 PySpark 依赖并调整项目设置以适配 Spark 作业支持使用 Apache Spark 进行大规模数据处理。详见 PySpark 集成文档。运行新项目无论选择了哪些工具与示例代码kedro new完成后下一步都是进入项目目录并安装依赖cd project-name uv pip install -r requirements.txt然后运行项目kedro run警告kedro run要求项目中至少有一条带节点的管线。请在运行前定义管线并确保它在pipeline_registry.py中完成注册。模板中的 pipeline_registry.py 即为管线注册入口不包含任何带节点管线时CLI 也会在创建时给出UserWarning提示starters.py#L267-L272。生成的项目结构使用基础模板--toolsnone --examplen时生成项目的骨架与仓库内 kedro/templates/project/{{ cookiecutter.repo_name }} 目录对应包括conf/base/catalog.yml、parameters.ymlconf/local/credentials.ymlconf/logging.ymldata/01_raw 至 08_reporting 的分层数据目录src/python_package/pipeline_registry.py、settings.py、__main__.py、pipelines/目录tests/、docs/、notebooks/、pyproject.toml、requirements.txt、README.md其中 settings.py 预置了CONFIG_LOADER_ARGSbase_env: base、default_run_env: local、CONF_SOURCE、CONFIG_LOADER_CLASS、CONTEXT_CLASS、DATA_CATALOG_CLASS、SESSION_STORE_CLASS等项目的核心配置项。可视化 Kedro 项目Kedro-Viz 用于可视化项目管线但它不属于标准 Kedro 安装需要单独安装到虚拟环境uv pip install kedro-viz进入项目目录后启动kedro viz run该命令会自动打开浏览器标签页在http://127.0.0.1:4141/提供可视化界面。退出可视化只需关闭浏览器标签页要重新获得终端控制权在 Mac 上按^c在 Windows 或 Linux 上按Ctrlc。从 Kedro-Viz 12.0.0 起Workflow 视图可以让你可视化并调试最近一次kedro run的结果——哪些节点成功、失败或被跳过一目了然工具选择总览流程图下面的流程图概括了kedro new的完整选择路径项目名 → 工具 → 示例Where next?理解 Kedro 的核心概念见基础概念文档。动手实践跟随 spaceflights 教程体验从搭建项目、添加依赖、创建节点、注册管线、配置 Data Catalog、添加文档到打包项目的完整流程。Notebook 用户学习如何将 Kedro 与 Jupyter notebook 结合。深入kedro new 的底层调用链如果你对kedro new的实现细节感兴趣可以沿着以下代码路径继续探索命令入口与参数定义starters.py#L295-L330 定义new命令及全部 CLI 选项。输入校验_validate_flag_inputs--starter不能与--tools/--example混用、_validate_input_with_regex_pattern名称/工具/示例的格式正则正则模式见 starters.py#L158-L186与 prompts.yml 中的regex_validator保持一致、_validate_package_name_is_importable。交互提示渲染_Prompt类starters.py#L1013-L1049从prompts.yml读取标题、文本、正则校验器并渲染彩色提示。配置合并_get_extra_context依次合并配置文件/交互输入、CLI 标志与默认值kedro_version、tools默认[None]、example_pipeline默认False并以字符串字典形式交给 cookiecutter。模板渲染_create_project调用cookiecutter.main.cookiecutter渲染模板、清理__pycache__、写入.telemetry并输出成功信息starters.py#L974-L1010。仓库测试 test_new_from_cli_flags.py 覆盖了名称合法性、工具组合、示例选择、遥测文件生成等关键路径是理解kedro new行为边界的最佳参考。【免费下载链接】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),仅供参考
返回列表