devpi如何启用root/public

1.devpi index root/public 输出解读

1.1 基础信息

  • **root/public**:当前查看的索引全路径(用户是 root,索引名是 public)。
  • **index**:表明接下来的内容是该索引的配置属性。

1.2 功能与权限配置

  • **simple index**:
  • 含义:符合 PEP 503 规范的简单包索引接口。
  • 作用:这是给 pip 用的。当你执行 pip install --index-url .../root/public/+simple/ 时,pip 就是通过这个接口来读取包列表的。
  • **permissions (权限组)**:
  • **toxresult_upload**:控制谁可以上传 tox 测试结果(tox 是一个 Python 自动化测试工具)。
  • upload:控制谁可以向这个索引上传(发布) Python 包。
  • **Special: ANONYMOUS (匿名用户)**:
  • 含义:代表未登录的任何人。
  • permissions 下方看到它,通常意味着默认情况下,任何人都拥有只读/下载权限(可以执行 pip install),但通常没有 upload(上传)权限。
  • **Users: root**:
  • 含义:明确拥有该索引管理或写权限的用户。在这里,只有 root 用户(创建者/管理员)拥有合法的最高权限(如修改配置、上传包等)。

1.3 安全与缓存策略

  • **whitelisted packages (白名单包)**:
  • 后面的 *(星号):代表所有包
  • 背景知识root/public 继承了 root/pypi(官方镜像)。在 devpi 的安全机制中,为了防止“依赖劫持”攻击(有人在私有源上传了一个和开源同名的包),你可以设置白名单。
  • 当前含义:设置为 * 意味着关闭了严格的白名单限制。无论是来自官方 PyPI 的包,还是你们自己上传的私有包,只要名字匹配,devpi 都会信任并允许下载和覆盖。这是最方便、最不容易报“403 Forbidden”的设置。

2.如何启用root/public

2.1 如何配置继承多个索引?

如果你希望 root/public 同时继承 root/pypi(官方镜像)和 root/pxb7(另一个私有/定制索引),你可以使用 devpi-client 执行以下命令:

1
2
3
4
5
# 登录 root 用户
devpi login root --password=""

# 设置多个 bases,用逗号隔开(不要加空格)
devpi index root/public bases=root/pxb7,root/pypi

2.2 核心机制:包的查找顺序

当你设置了多个继承对象,比如 bases=root/pxb7,root/pypi 时,如果你执行 pip install attrsdevpi 寻找这个包的优先级顺序如下:

  1. 第一优先级root/public 本地(你自己直接上传到该索引的包)。
  2. 第二优先级root/pxb7bases 列表中靠前的索引)。
  3. 第三优先级root/pypibases 列表中靠后的索引)。

⚠️ 注意:顺序很重要。如果你在 root/pxb7root/pypi 中有同名且同版本的包,devpi 会优先使用在 bases 中写在前面的那个索引(即 root/pxb7)。