Kedro v0.18.7删除pipeline2后报错:Pipeline无可用节点
原本运行正常的Kedro项目,执行以下操作后彻底无法运行:
- 执行
kedro pipeline create pipeline2创建与主pipeline并行的新pipeline - 发现无需该pipeline后,执行
kedro pipeline delete pipeline2删除
当前核心报错:
ValueError: Pipeline contains no nodes after applying all provided filters
执行kedro registry list仅返回[default],且尝试过以下修复均无效:
- 重新创建主pipeline失败
- 创建空pipeline并迁移
nodes.py和pipelines.py代码失败 - 执行
kedro build-docs无效 - 执行
pip install pip-tools、pip install -r src/requirements.txt、pip install "kedro-datasets[<group>]"无效果
环境信息:
- Kedro v0.18.7
- Python 3.10.8
1. 检查Pipeline注册配置
Kedro 0.18.x的模块化pipeline注册依赖src/<项目名>/pipelines/__init__.py文件,删除pipeline2时大概率误删了其他pipeline的注册代码。
打开该文件,确保所有需要加载的pipeline(比如data_processing、data_science)都正确注册,示例格式:
from .data_processing.pipeline import create_pipeline as create_data_processing_pipeline from .data_science.pipeline import create_pipeline as create_data_science_pipeline def register_pipelines(): data_processing = create_data_processing_pipeline() data_science = create_data_science_pipeline() return { "__default__": data_processing + data_science, "data_processing": data_processing, "data_science": data_science }
重点:__default__是默认执行的pipeline组合,必须包含所有需要运行的节点。
2. 验证子Pipeline的pipeline.py文件
逐个检查每个子pipeline目录(如src/pipelines/data_processing/)下的pipeline.py,确保create_pipeline函数正确返回包含节点的Pipeline对象,示例:
from kedro.pipeline import Pipeline, node from .nodes import node_function1, node_function2 def create_pipeline(**kwargs): return Pipeline( [ node( func=node_function1, inputs="input_data", outputs="processed_data", name="process_data_node" ), node( func=node_function2, inputs="processed_data", outputs="final_output", name="generate_output_node" ) ] )
确认每个节点的引用路径正确,没有因删除pipeline2时误修改其他文件。
3. 清理pipeline2残留配置
检查以下位置是否还有pipeline2的残留配置,如有直接删除:
pyproject.toml:查找pipeline2相关条目src/<项目名>/settings.py:确认REGISTERED_PIPELINES配置未被错误修改- 临时缓存:删除项目根目录下的
.kedro文件夹,再重新执行kedro install
4. 强制刷新Pipeline注册表
执行以下命令清理缓存并测试单个pipeline:
kedro clean kedro run --pipeline=data_processing # 先单独测试单个pipeline是否能运行
如果单个pipeline能正常运行,再测试默认组合:
kedro run
5. 检查节点导入路径
确保nodes.py中的函数在pipeline.py中正确导入,若存在导入错误,Kedro会静默跳过节点,直接导致“no nodes”错误。
内容的提问来源于stack exchange,提问作者Eduardo_Eng_Dados

