本地Spyder创建KFP组件触发WinError 123错误该如何解决?
错误根源
- KFP的
@component装饰器在编译组件时,需要读取函数定义所在的源文件代码完成序列化。Spyder Notebook运行在Windows系统下时,每个代码cell对应的临时内核文件命名会带上<ipython-input-xxx-xxx>格式的标识,而Windows文件系统不允许路径中出现<、>这类特殊字符,KFP尝试读取该路径时就会触发WinError 123报错。在线Jupyter Notebook运行环境一般是Linux/macOS,这类系统允许路径带尖括号,所以不会触发错误。 - 你当前的组件代码也存在语法错误:
Output[Dataset]类型的参数不能直接赋值为DataFrame对象,需要先将处理好的数据写入dataset.path对应的路径中,KFP才能正确输出流水线Artifact。
修复方案
- 方案1:把自定义组件的代码单独写到独立的
.py文件中,在Spyder Notebook里导入该文件里的组件函数再进行流水线编译,避免KFP读取带特殊字符的临时cell路径。 - 方案2:如果要直接在Notebook cell里写组件代码,给
@component装饰器增加base_image参数的同时,额外指定output_component_file参数,显式指定组件YAML的输出路径,绕开临时文件读取逻辑。 - 方案3:修正组件内部的赋值逻辑,正确的Dataset输出写法参考如下:
@component(base_image="python:3.9", packages_to_install=["pandas"]) def create_dataset( gcs_csv_path_train: str, dataset: Output[Dataset], ): import pandas as pd df = pd.read_csv(gcs_csv_path_train) label_df = df.pop('Class') # 把处理好的数据写入Dataset对应的路径 label_df.to_csv(dataset.path, index=False)
内容的提问来源于stack exchange,提问作者Marco Abbatangelo
相关产品推荐
相关产品推荐

