Kedro 命令行接口(CLI)完全指南:从命令参考到自定义扩展 Kedro 命令行接口CLI完全指南从命令参考到自定义扩展【免费下载链接】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 框架的命令行接口CLI涵盖 Shell 自动补全配置、python -m kedro的模块化调用方式、全局命令与项目命令的完整参数说明以及如何通过cli.py与插件机制自定义项目命令。读完本文你将能够熟练使用kedro new、kedro run等核心命令完成项目创建、管道执行与打包发布并能依据源码理解 CLI 命令的注册与加载原理。目录Kedro CLI 概览配置 Shell 自动补全可选从 Python 模块方式调用 Kedro CLI可选全局命令与项目命令全局命令详解项目命令详解自定义或覆盖项目专属命令CLI 加载机制源码解读Kedro CLI 概览Kedro 的命令行接口让你可以在终端 Shell 中运行 Kedro 命令例如 macOS 的 Terminal、Windows 的 cmd.exe 或 PowerShell。CLI 的核心用途有两个创建新的 Kedro 项目与运行项目中的管道。在终端中执行kedro并回车即可看到可用命令的总览输入kedro --help可查看帮助信息kedro command --help可查看具体命令的参数说明帮助选项统一为-h/--help参见 kedro/framework/cli/utils.py 中的CONTEXT_SETTINGS。CLI 入口定义在 kedro/framework/cli/cli.py 中其根命令通过click.group注册并附带版本选项# 查看版本号对应 cli.py 中的 --version/-V 选项 kedro --version # 查看 Kedro 概览信息与已安装插件对应 info 命令 kedro info其中kedro info会打印 Kedro 的 ASCII 徽标、版本号以及通过入口点entry point发现的所有已安装插件及其版本。配置 Shell 自动补全可选如果你使用 macOS 或 Linux可以为kedro命令配置 Shell 自动补全。首先确认当前使用的 Shell 类型echo $0根据输出结果选择对应的配置方式。Bash将下面这行添加到~/.bashrc或直接在命令行执行eval $(_KEDRO_COMPLETEbash_source kedro)Z shellZsh将下面这行添加到~/.zshrceval $(_KEDRO_COMPLETEzsh_source kedro)Fish将下面这行添加到~/.config/fish/completions/foo-bar.fisheval (env _KEDRO_COMPLETEfish_source kedro)这套机制依赖 Click 的 Shell 补全协议Kedro 通过_KEDRO_COMPLETE环境变量向对应的补全脚本生成器暴露命令结构。重新加载 Shell 配置如source ~/.bashrc后输入kedro再按 Tab 即可看到命令与参数补全建议。从 Python 模块方式调用 Kedro CLI可选除了kedro可执行文件你还可以将 Kedro CLI 作为 Python 模块调用python -m kedro该方式与直接运行kedro等价。其入口定义在 kedro/main.py 中它调用kedro.framework.cli.main并会把sys.argv[0]规范化为python -m kedro使提示信息中的程序名保持一致。全局命令与项目命令Kedro 提供的命令被自动分组为两类其分组逻辑定义在 kedro/framework/cli/cli.py 的global_commands与project_commands两个click.Group中全局命令Global commands可以在任意目录运行不绑定任何特定的 Kedro 项目项目命令Project commands必须在 Kedro 项目目录内运行作用于当前项目。注意项目相关命令可以在 Kedro 项目内的任意子目录中运行不要求必须位于项目根目录。从 cli.py 的LazyGroup定义可以看到两组的成员命令组子命令定义模块全局命令new、starterkedro/framework/cli/starters.py项目命令registry、catalog、ipython、run、package、jupyter、pipeline、server见下方各小节这些子命令采用懒加载lazy loading机制见 utils.py 中的LazyGroup只有在实际执行某个子命令时对应的模块才会被导入从而加快kedro --help的响应速度。如果在非项目目录中执行项目命令如kedro runCLI 会给出明确提示Kedro 正在当前工作目录中查找pyproject.toml文件——这正是判断一个目录是否为 Kedro 项目的标志见 cli.py。全局命令详解kedro new创建新项目kedro new用于创建一个新的 Kedro 项目底层通过 cookiecutter 渲染项目模板项目模板位于 kedro/templates/project提示定义见其 prompts.yml。其完整参数如下参数简写说明--config-c非交互模式使用 YAML 配置文件提供项目信息必须包含模板prompts.yml要求的键默认为project_name、repo_name、python_package--starter-s指定 starter 模板可以是本地目录路径、远程 VCS 仓库 URL或kedro starter list中列出的别名--checkout—在 starter 仓库中检出指定的 tag、分支或提交仅在使用--starter、--toolspyspark或--exampleyes时生效--directory—starter 仓库内部存放模板的目录须与--starter一起使用--name-n新 Kedro 项目的名称--tools-t选择要包含的工具见下方工具列表--example-ey/n是否包含示例管道--telemetry-tcyes/no是否允许 Kedro 收集使用统计--verbose-v查看详细日志与错误堆栈--tools支持以下 6 种工具由 starters.py 中的TOOLS_ARG_HELP定义Linting基于 Ruff 的基础代码检查配置Testing基于 pytest 的基础测试配置Custom Logging更丰富的日志选项Documentation基于 Sphinx 的基础文档配置Data Structure提供数据存储的目录结构PySpark配置 PySpark 工作环境工具名支持短名lint,test,log,docs,data,pyspark、all与none可组合使用# 选择全部工具 kedro new --toolsall # 选择部分工具任意子集 kedro new --toolslint,test,log,docs,data,pyspark # 不选择任何工具 kedro new --toolsnone--tools的选择映射关系定义在 starters.py 的TOOLS_SHORTNAME_TO_NUMBER与NUMBER_TO_TOOLS_NAME中。Kedro Viz 无需选择它始终被自动包含在项目中。交互式创建时可使用范围语法如1-3源码中的_parse_tools_input负责解析。常用组合示例# 全参数非交互式创建指定名称、工具与示例管道 kedro new --namemy-new-project --toolslint,test,log,docs,data --exampleyes创建过程中CLI 还会校验项目 Python 包名如果包名与 Python 关键字或标准库模块冲突如json、email会直接报错终止见 starters.py 的_validate_package_name_is_importable避免生成后无法导入的问题。kedro starter管理项目模板kedro starter list列出所有可用的官方 starter 别名。当前仓库中注册的官方 starter 定义在 starters.pyastro-airflow-irisAstro Airflow Iris 示例spaceflights-pandaspandas 版 Spaceflights 示例spaceflights-pysparkPySpark 版 Spaceflights 示例databricks-irisDatabricks Iris 示例support-agent-langgraphLangGraph 支持 Agent 示例# 列出所有官方 starter kedro starter list使用 starter 创建项目# 使用空间飞行pandasstarter 创建项目 kedro new --starterspaceflights-pandas插件也可以通过kedro.starters入口点注册自定义 starterKedroStarterSpec结构见 starters.py。项目命令详解kedro run运行管道kedro run是 Kedro 最核心的命令定义于 kedro/framework/cli/project.py。它会创建一个KedroSession并调用session.run()执行管道。完整参数如下参数简写说明--from-inputs—一组数据集名称作为管道的起始点--to-outputs—一组数据集名称作为管道的终点--from-nodes—一组节点名称作为管道的起始点--to-nodes—一组节点名称作为管道的终点--nodes-n只运行指定名称的节点--runner-r指定 runnerSequentialRunner、ParallelRunner、ThreadRunner默认SequentialRunner--async—以线程方式异步加载/保存节点输入输出已被弃用建议改用--runner-paramsis_asyncTrue--runner-params—传给 runner 的额外关键字参数逗号分隔、等号赋值如max_workers4,is_asyncTrue--env-eKedro 配置环境名默认local--tags-t只使用带有指定 tag 的节点构造管道可多次指定取并集--load-versions-lv指定加载特定数据集版本时间戳格式dataset:YYYY-MM-DDThh.mm.ss.sssZ--pipeline-p要运行的已注册管道名称已被弃用建议改用--pipelines未指定时运行__default__--pipelines—逗号分隔的多个已注册管道名称如data_engineering,feature_engineering未指定时运行__default__--namespaces-ns只运行指定名称的命名空间节点--config-c从 YAML 配置文件加载 run 参数命令行参数优先于配置文件--conf-source—项目配置存储目录的路径--params—传递给上下文初始化器的额外参数逗号分隔、等号或冒号赋值如param1value1,param2value2用点号表示嵌套字典如param_group.param1:value1--only-missing-outputs—只运行输出缺失的节点节点全部输出已持久化时跳过执行常用示例# 在默认环境local运行默认管道 kedro run # 指定环境运行 kedro run --envdev # 只运行打了特定 tag 的节点可叠加多个 tag kedro run --tagstag1 --tagstag2 # 使用并行 runner并传入 max_workers 参数 kedro run --runnerParallelRunner --runner-paramsmax_workers4 # 只运行指定命名空间下的节点 kedro run --namespacesdata_science # 从配置文件读取 run 参数命令行参数优先 kedro run --configrun_config.yml # 只运行输出缺失的节点 kedro run --only-missing-outputs从源码看run的执行链路为load_obj按名称加载 runner 类 →_resolve_runner_kwargs合并--async与--runner-params见 project.py→settings.SESSION_CLASS.create()创建会话 →session.run()传入所有过滤条件。--pipeline与--pipelines不能同时使用源码会抛出KedroCliError而--params与--runner-params均由_split_params解析为字典它底层使用 OmegaConf 的from_dotlist支持点号嵌套键见 utils.py。kedro ipython进入交互式环境kedro ipython打开一个预加载了项目变量的 IPython 会话见 project.py。会话中会自动提供以下变量catalog包含所有已定义数据集的目录实例context.catalog的快捷方式contextKedro 项目上下文提供对 Kedro 库组件的访问pipelines管道注册表中定义的管道session编排管道运行的 Kedro 会话kedro ipython若修改了catalog.yml等配置可使用%reload_kedroline magic 重新加载这些变量该 magic 也会在变量未定义时显示错误信息。--env选项会设置KEDRO_ENV环境变量。kedro jupyterJupyter 集成kedro jupyter提供三个子命令见 kedro/framework/cli/jupyter.py都会为项目创建一个名为kedro_package_name的专用 IPython 内核# 初始化项目的 Jupyter 内核 kedro jupyter setup # 打开 Jupyter Notebook预加载项目变量 kedro jupyter notebook # 打开 Jupyter Lab预加载项目变量 kedro jupyter lab内核创建逻辑位于_create_kernel它安装用户级内核规格并修改kernel.json使内核启动时加载kedro.ipython扩展见 jupyter.py。kedro package打包项目kedro package将 Kedro 项目打包为 Python wheel并导出配置文件见 project.py构建.whl文件并保存到dist/目录将项目配置排除所有local/*.yml文件打包为独立的conf-package_name.tar.gz归档便于部署或共享。kedro package两个产物都会出现在dist/文件夹中旧式项目布局除外。打包配置时使用tar --excludelocal/*.yml确保本地敏感配置不被包含。kedro pipeline管理模块化管道kedro pipeline提供创建与删除模块化管道的命令见 kedro/framework/cli/pipeline.py# 创建名为 name 的模块化管道 kedro pipeline create name # 不创建管道配置文件 kedro pipeline create name --skip-config # 使用自定义 cookiecutter 模板创建管道 kedro pipeline create name --template/path/to/template # 指定配置环境默认 base kedro pipeline create name --envbase # 删除管道-y 表示非交互式确认 kedro pipeline delete name -y创建命令会生成管道源码src/package/pipelines/name/、测试tests/pipelines/name/与配置conf/env/parameters_name.yml、conf/env/catalog_name.yml。模板查找优先级为命令行--template 项目内templates/pipeline/ 全局默认模板kedro/templates/pipeline。管道名称需符合 Python 包命名规范见_assert_pkg_name_ok。kedro catalog检查数据目录kedro catalog提供三个数据目录诊断命令见 kedro/framework/cli/catalog.py# 描述指定管道中使用的数据集按类型分组datasets/factories/defaults kedro catalog describe-datasets --pipelinepipeline_name # 列出数据目录中全部数据集工厂模式按匹配优先级排序 kedro catalog list-patterns # 解析工厂模式与管道数据集的匹配结果 kedro catalog resolve-patterns --pipelinepipeline_namedescribe-datasets的输出将数据集分为三类显式定义在 catalog 中的datasets、由工厂模式解析出的factories、以及未匹配任何模式的defaults。结果以 YAML 形式输出。kedro registry查看已注册管道kedro registry用于查看pipeline_registry.py中注册的管道见 kedro/framework/cli/registry.py# 列出 pipeline_registry.py 中定义的所有管道 kedro registry list # 描述指定管道的节点默认描述 __default__ 管道 kedro registry describe pipeline_namekedro registry describe data_engineeringdescribe会输出管道中每个节点的名称与对应函数名。kedro server以 HTTP 服务方式运行kedro server start以 HTTP 服务方式启动 Kedro允许外部系统通过 HTTP 端点编程式地触发管道执行见 kedro/framework/cli/server.py# 默认 host 与端口启动 kedro server start # 指定 host 与端口 kedro server start --host 0.0.0.0 --port 8080 # 开发模式代码变更后自动重启勿用于生产环境 kedro server start --reload其参数包括--host/-H默认值见 kedro/server/utils.py 的DEFAULT_HOST、--port/-p默认DEFAULT_HTTP_PORT、--reload、--env/-e服务会话的 Kedro 配置环境、--conf-source。服务暴露两个端点GET /health健康检查与POST /run执行管道。运行需要fastapi、pydantic、uvicorn缺失时会提示通过uv pip install kedro[server]安装。自定义或覆盖项目专属命令Kedro CLI 允许将一组命令与依赖关联到某个目标然后在项目目录内执行。项目支持的命令由框架侧定义若想自定义 Kedro 命令有两种方式在项目的 Python 包中创建cli.py文件通过插件框架向其中注入命令。cli.py文件模板如下来自原文档与当前仓库源码 project.py 的run定义对应Command line tools for manipulating a Kedro project. Intended to be invoked via kedro. from typing import Any import click from kedro.framework.cli.project import ( ASYNC_ARG_HELP, CONFIG_FILE_HELP, CONF_SOURCE_HELP, FROM_INPUTS_HELP, FROM_NODES_HELP, LOAD_VERSION_HELP, NAMESPACES_ARG_HELP, NODE_ARG_HELP, ONLY_MISSING_OUTPUTS_HELP, PARAMS_ARG_HELP, PIPELINE_ARG_HELP, RUNNER_ARG_HELP, RUNNER_PARAMS_HELP, TAG_ARG_HELP, TO_NODES_HELP, TO_OUTPUTS_HELP, _resolve_runner_kwargs, ) from kedro.framework.cli.utils import ( CONTEXT_SETTINGS, _config_file_callback, _split_params, _split_load_versions, env_option, split_string, split_node_names, validate_conf_source, ) from kedro.framework.session import KedroSession from kedro.utils import load_obj click.group(context_settingsCONTEXT_SETTINGS, name__file__) def cli(): Command line tools for manipulating a Kedro project. cli.command() click.option( --from-inputs, typestr, default, helpFROM_INPUTS_HELP, callbacksplit_string, ) click.option( --to-outputs, typestr, default, helpTO_OUTPUTS_HELP, callbacksplit_string, ) click.option( --from-nodes, typestr, default, helpFROM_NODES_HELP, callbacksplit_node_names, ) click.option( --to-nodes, typestr, default, helpTO_NODES_HELP, callbacksplit_node_names ) click.option( --nodes, -n, node_names, typestr, default, helpNODE_ARG_HELP, callbacksplit_node_names, ) click.option(--runner, -r, typestr, defaultNone, helpRUNNER_ARG_HELP) click.option(--async, is_async, is_flagTrue, helpASYNC_ARG_HELP) click.option( --runner-params, typeclick.UNPROCESSED, default, helpRUNNER_PARAMS_HELP, callback_split_params, ) env_option click.option( --tags, -t, typestr, default, helpTAG_ARG_HELP, callbacksplit_string, ) click.option( --load-versions, -lv, typestr, default, helpLOAD_VERSION_HELP, callback_split_load_versions, ) click.option(--pipeline, -p, typestr, defaultNone, helpPIPELINE_ARG_HELP) click.option( --namespaces, -ns, typestr, default, helpNAMESPACES_ARG_HELP, callbacksplit_node_names, ) click.option( --config, -c, typeclick.Path(existsTrue, dir_okayFalse, resolve_pathTrue), helpCONFIG_FILE_HELP, callback_config_file_callback, ) click.option( --conf-source, callbackvalidate_conf_source, helpCONF_SOURCE_HELP, ) click.option( --params, typeclick.UNPROCESSED, default, helpPARAMS_ARG_HELP, callback_split_params, ) click.option( --only-missing-outputs, is_flagTrue, helpONLY_MISSING_OUTPUTS_HELP, ) def run( tags: str, env: str, runner: str, is_async: bool, runner_params: dict[str, Any], node_names: str, to_nodes: str, from_nodes: str, from_inputs: str, to_outputs: str, load_versions: dict[str, str] | None, pipeline: str, config: str, conf_source: str, params: dict[str, Any], namespaces: str, only_missing_outputs: bool, ) - dict[str, Any]: Run the pipeline. runner_obj load_obj(runner or SequentialRunner, kedro.runner) runner_kwargs _resolve_runner_kwargs(is_async, runner_params) tuple_tags tuple(tags) tuple_node_names tuple(node_names) with KedroSession.create( envenv, conf_sourceconf_source, runtime_paramsparams ) as session: return session.run( tagstuple_tags, runnerrunner_obj(**runner_kwargs), node_namestuple_node_names, from_nodesfrom_nodes, to_nodesto_nodes, from_inputsfrom_inputs, to_outputsto_outputs, load_versionsload_versions, pipeline_namepipeline, namespacesnamespaces, only_missing_outputsonly_missing_outputs, )把上述cli.py放入项目的src/python_package/目录后其中的cli组就会被合并进kedro命令树。需要注意如果cli.py存在但其中没有名为cli的变量CLI 会抛出KedroCliError见 cli.py。CLI 加载机制源码解读理解 Kedro CLI 的加载机制有助于正确设计自定义命令与插件。核心逻辑集中在 kedro/framework/cli/cli.py 的KedroCLI类中项目检测KedroCLI.__init__调用is_kedro_project/find_kedro_project检查当前目录是否为 Kedro 项目依据pyproject.toml若是则通过bootstrap_project加载项目元数据。命令集合KedroCLI继承自自定义的CommandCollection见 utils.py由全局命令与项目专属命令两部分组成。加载顺序与覆盖优先级从project_groups属性的源码cli.py可以确认命令合并顺序为内置命令 插件命令 项目自定义 cli.py即后加载者覆盖先加载者插件可以覆盖内置命令项目自己的cli.py又可以覆盖插件命令。全局命令则按内置命令 插件全局命令的顺序合并见global_groups。 4.入口点Entry Point机制插件通过 utils.py 中ENTRY_POINT_GROUPS定义的组注册命令——kedro.global_commands全局命令、kedro.project_commands项目命令、kedro.init初始化钩子、kedro.hooks钩子等由load_entry_points加载。 5.生命周期钩子main()方法会在命令执行前后触发before_command_run与after_command_runCLI 钩子方便插件做统一的横切处理。 6.错误提示当在非项目目录中尝试执行项目命令时CommandCollection会基于resolve_command捕获No such command异常并给出Kedro project not found in this directory的提示与查找pyproject.toml的建议cli.py此外还会利用_suggest_cli_command基于difflib的近似匹配对拼写错误的命令给出 Did you mean 建议。总结Kedro CLI 以全局命令 项目命令的双层结构覆盖了数据科学工作流的完整生命周期kedro new创建项目、kedro pipeline create搭建模块化管道、kedro run执行管道、kedro package打包发布配套的catalog、registry、jupyter、ipython与server命令则服务于数据目录诊断、管道检视、交互开发与 HTTP 化部署。而基于入口点与cli.py的扩展机制让内置命令、插件命令与项目自定义命令形成了清晰的覆盖优先级你可以在 docs/extend/plugins.md 中进一步了解插件开发细节。如需在终端中查看每个命令的最新帮助直接运行kedro command --help即可。【免费下载链接】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),仅供参考