十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

awesome-python 构建时报 slug collision in /categories/ namespace 怎么排查

awesome-python 构建时报 slug collision in /categories/ namespace 怎么排查 awesome-python 构建时报 slug collision in /categories/ namespace 怎么排查【免费下载链接】awesome-pythonThe definitive list that answers I want to do X in Python, which tool should I use?项目地址: https://gitcode.com/GitHub_Trending/aw/awesome-python用make build构建 awesome-python 网站时如果 README.md 里两个分类或分组的标题 slug 化后相同website/build.py会直接抛出ValueError构建终止、不产出任何站点。本文覆盖这个报错的完整排查路径确认报错内容 → 理解 slug 如何由标题生成 → 在 README.md 中定位撞名来源 → 改名并验证构建通过。先确认你看到的是不是这个错误在仓库根目录执行构建make buildmake build实际执行的是uv run python website/build.py见 Makefile。如果 README 结构没问题构建会正常结束并打印三行信息groups/categories 数量、Total entries、Output 路径。如果 slug 撞名则不会走到渲染阶段而是抛出ValueError: slug collision in /categories/ namespace: [slug 列表]. Rename a category or group so their slugs differ.报错信息本身给出了两样东西冲突的具体 slug可能不止一个按字母排序的列表以及处理方向——把其中某个 category 或 group 改名让 slug 不再相同。这是 build.py 中的检查逻辑也是修复的唯一文档化入口。slug 是怎么生成的什么情况下会撞每个顶层 slug 由标题名经 readme_parser.py 中的slugify()生成规则是转小写删除所有非a-z0-9、空白和连字符的字符下划线、、!等一律去掉空白压缩替换为单个-多个连续-压缩为一个。tests/test_build.py 里的用例展示了几个真实映射可直接用于心算核对标题名slugAdmin Panelsadmin-panelsRESTful APIrestful-apiCommand-line Toolscommand-line-toolsDate and Timedate-and-time由此可以推出三类典型撞名两个名字只差被slugify删除的字符例如 CLI Tools 与 CLITools 都会变成cli-tools一个 Thematic Group 与一个 Section 同名仓库自带的回归测试 test_build_fails_when_group_and_category_slug_collide 用的最小 README 正是这种情况——分组标记**Widgets**和分类标题## Widgets并存构建必然失败与保留 slugbuilt-in撞名构建在检查重复时会把常量BUILTIN_SLUG值为built-in见 build.py一并计入所以任何 slug 化为built-in的标题如 Built in、Built-in也会触发该错误。定位撞名来源从报错 slug 反查 README.mdAGENTS.md 明确 README.md 是站点内容的唯一数据源website/只是把它渲染成静态站点所以修复位置一定在 README.md 的标题里不在website/下。两类会产生顶层 slug 的标题位置不同分类category/Section## Projects与## Resources或## Contributing之间##/###级别的标题如## Testing分组Thematic GroupProjects 区域内的加粗独占段落如**AI ML**、**Web Development**。没有加粗标记之前的分类会归入名为Other的组其 slug 为other这是 readme_parser.py 的解析规则。排查步骤记下报错列表中的每个 slug在 README.md 的 Projects 区域内检索可能 slug 化为该值的标题文本考虑slugify会删掉、下划线等字符搜索时放宽匹配例如找built-in要同时搜 Built-in 和 Built in对候选标题用slugify实际计算确认而不是只看名字相似。仓库已提供现成函数uv run python -c from readme_parser import slugify; print(slugify(你的标题文本))slugify(你的标题文本)中引号内替换为你在 README 里找到的候选标题。把冲突列表里的每个 slug 都对应到具体标题后就能判断该改哪一个。修复改一个标题让 slug 区分开按报错信息给出的处理方式在 README.md 中重命名其中一个分类标题或分组标记使两者的 slug 不同。例如把## Built in改成## Built-in Utilitiesslug 变为built-in-utilities或与Widgets撞名的分组标记**Widgets**改成**Widget Tools**。两点注意改哪个都行报错信息不强制区分category 优先还是 group 优先任选一个改名即可改名后README.md 顶部## Categories里的目录链接锚点如[#widgets](#widgets)也应同步指向新标题否则目录项会指向不存在的锚点——目录与 Projects 区域标题的对应关系在 readme_parser.py 的解析里并不强制但站点渲染会按新标题生成页面路径/categories/新slug/。验证修复重新构建make build成功判据是不再抛出ValueError并打印构建完成信息groups/categories 数量、Total entries、Output 路径产物写入website/output/。 2. 运行 slug 冲突回归测试确认现有测试不受影响uv run pytest website/tests/ -v其中 test_build_fails_when_group_and_category_slug_collide 会用最小 README 复现该错误验证构建对撞名场景的行为保持不变。需要注意的边界slug 检查只覆盖顶层命名空间所有 category slug 所有 group slug 保留的built-in子分类Section 内的缩进 bullet 标签的 slug 只用于/categories/分类/子分类/这类更深层路径不参与这次重复检查。所以修复完顶层冲突后构建即应通过如果改名又引出其他问题再按新的报错信息重复上面的定位流程。【免费下载链接】awesome-pythonThe definitive list that answers I want to do X in Python, which tool should I use?项目地址: https://gitcode.com/GitHub_Trending/aw/awesome-python创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表