【Repos系列】Bandersnatch同步原理
Bandersnatch 是 PyPI(Python Package Index)的官方镜像工具,旨在高效同步和维护 PyPI 的完整本地副本。其核心原理围绕 元数据抓取、增量同步、文件校验和并发下载,以下为详细工作流程:
1. 元数据抓取与包列表生成
-
PyPI 接口:
-
Bandersnatch 通过 PyPI 的 JSON API (如 https://pypi.org/pypi/{package}/json)获取所有包的元数据。
-
主入口为 Simple index,列出所有包的名称。
-
每个包的详细元数据(版本、文件列表、哈希值等)通过包名对应的 JSON 接口获取。
-
-
全量同步初始化:
-
首次运行时,下载所有包的元数据,生成本地索引(index.html 和 packages/ 目录结构)。
-
2. 增量同步机制
-
基于时间戳的更新检测:
-
Bandersnatch 记录上一次同步的时间戳,仅同步 自上次同步后新增或修改的包。
-
通过对比 PyPI 上包的 last_modified 时间戳与本地记录,确定需更新的包。
-
-
-
删除包处理:
-
若 PyPI 上某包被删
-