devpi开源pypi包缓存root/public vs root/pypi关系

devpi(一个强大的 Python 包索引服务器和缓存库)中,你看到的 rootroot/publicroot/pypi 并不是操作系统盘符里的“本地目录”,而是 devpi 服务器内部的“索引(Indices)”路径,它们就像是不同的“文件夹”或者“视图”,用来隔离和管理不同来源的 Python 包。


1. root (用户空间)

  • 本质:这是 devpi 默认创建的超级管理员用户(User)的空间。
  • 角色:在 devpi 中,所有的索引都必须归属于某个用户。root 用户是整个服务器的管理者。在这个路径下,可以创建很多不同的索引(比如下面的 publicpypi)。

2. root/pypi (PyPI 官方镜像缓存)

  • 本质:这是一个 type=mirror(镜像) 类型的索引。
  • 作用:它直接对接官方的 PyPI (pypi.org)。
  • 工作原理
  • 当你通过这个索引安装包时(例如 pip install requests),如果 devpi 服务器上没有,它会去官方 PyPI 下载,并缓存到本地
  • 下次你或者你的同事再安装同样的包时,devpi 直接从本地缓存提供,速度极快。

特点:只读,你不能手动把自己的私有包 upload(上传)到这个索引里。

3. root/public (复合/集成本地与线上的索引)

  • 本质:这是一个 type=stage(阶段/通用) 类型的索引,并且它继承(bases)了 root/pypi

  • 作用:这是你平时开发、部署时最推荐使用的 pip 源地址

  • 工作原理:它把“你自己的私有包”和“官方的公有包”融合在了一起。

  • 找包顺序:当你通过 root/public 安装包时,devpi 会先在 root/public 本地找。如果找不到,它会顺着继承关系,去 root/pypi(即官方 PyPI)里找。

  • 特点可读写。你可以把公司内部研发的私有 Python 包上传到 root/public 中。


4.总结

1
2
3
4
[ root/public (复合索引:可上传私有包) ]

▼ (继承/找不到就去下游找)
[ root/pypi (官方镜像:只读缓存 pypi.org) ]
  • 如果你要配置 pip.conf 下载包:请使用 **root/public**。这样既能装上官方的包,又能装上你们自己写的私有包。
  • 如果你要发布(upload)自己的私有包:请发布到 **root/public**(或者你在 root 下自己创建的其他 stage 索引)。