如何获取Jfrog Artifactory远程仓库已缓存的Python包及版本列表
解决方案
方法1:使用文件列表API直接遍历缓存目录(最简方案)
直接调用Artifactory的存储文件列表接口,仅拉取PyPI类型远程仓库已缓存的包文件:
- 接口请求格式:
GET /api/storage/{你的Python远程仓库名}/.pypi/?list&deep=1&listFolders=0
说明:.pypi是Artifactory存储PyPI包的默认根目录,deep=1限定只遍历到包名+版本的层级,listFolders=0过滤掉空目录,只返回实际存在的包文件。 - 返回结果的
files字段中,每一项的uri格式为/{包名}/{包名}-{版本}.whl或/{包名}/{包名}-{版本}.tar.gz,直接拆分uri即可提取对应的包名和已缓存的版本号,如果同一个版本对应多种包格式(whl、tar.gz),去重后即可得到该包的已缓存版本列表。
方法2:使用AQL查询(灵活可扩展)
如果需要附加过滤条件(比如仅查询指定时间范围内缓存的包),可以用Artifactory查询语言实现更灵活的检索:
- 接口请求格式:
POST /api/search/aql - 请求体参考:
items.find( { "repo": "{你的Python远程仓库名}", "path": {"$match": ".pypi/*"}, "name": {"$match": "*.whl|*.tar.gz|*.zip"} } ).include("path","name")
- 返回结果中
path字段为.pypi/{包名},拆分即可得到包名,name字段为包的完整文件名,拆分即可得到版本号。
通用注意事项
- 调用接口前需要在请求头中带上有对应仓库读取权限的身份凭证,比如API Key或者Bearer Token。
- 两种方案查询的都是已经存储到本地Artifactory缓存中的文件,不会请求上游仓库拉取全量可用版本,完全符合你的需求。
内容的提问来源于stack exchange,提问作者Naresh Babu
相关产品推荐
相关产品推荐

