You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Google Artifact Registry虚拟仓库使pip遵循源优先级而非版本

如何配置Google Artifact Registry虚拟仓库,优先使用私有仓库的包(忽略PyPI同包的更高版本)

你遇到的问题是因为Artifact Registry的默认上游优先级仅在同一版本存在于多个上游仓库时生效,而当pip请求未指定版本的包时,系统会聚合所有上游的版本列表,由pip自行选择最高版本,这时通用优先级规则不生效。要实现“只要私有仓库存在该包,就仅从私有仓库安装”的需求,需要给私有仓库添加包匹配规则,将特定包的所有请求路由到私有仓库。

具体配置步骤

  1. 修改上游策略文件policies.json
    给私有仓库条目添加packageMatches字段,指定需要优先匹配的包名(支持精确匹配或通配符*匹配所有包):

    [{
      "id": "python-repo",
      "repository": "projects/my-project-123456/locations/us-west1/repositories/python-repo",
      "priority": 100,
      "packageMatches": [{"packageName": "sampleproject"}]
    },{
      "id": "pypi-proxy",
      "repository": "projects/my-project-123456/locations/us-west1/repositories/pypi-proxy",
      "priority": 10
    }]
    
    • 如果你希望所有私有包都优先于PyPI,将packageName设为"*"即可。
  2. 更新虚拟仓库的上游策略
    用gcloud命令应用修改后的策略:

    PROJECT_ID=my-project-123456
    LOCATION=us-west1
    gcloud artifacts repositories update virtual-python-repo \
      --location="$LOCATION" \
      --upstream-policy-file=policies.json \
      --project="$PROJECT_ID"
    

验证效果

配置完成后:

  • 执行pip install sampleproject会直接从私有仓库python-repo拉取1.0.0版本,不会再查询PyPI的更高版本
  • 私有仓库中不存在的包,仍会正常通过pypi-proxy从PyPI获取

原理说明

包匹配规则的优先级高于通用的上游优先级:一旦请求的包名匹配了某个上游仓库的packageMatches规则,Artifact Registry会直接将该请求路由到对应仓库,不会再去其他上游查询版本信息,完美满足你“私有包优先”的需求。

内容的提问来源于stack exchange,提问作者Come Raczy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 04:42:14