pypi工件的人工过期
Artifactory expiration of pypi artifacts
我有一个只能由特定用户更新但所有人都可以访问的代理 pypi 存储库,我有一个私人 pypi 存储库和一个虚拟存储库来访问它们。
我的问题是一段时间后,虚拟仓库上的任何 pip 安装都会失败,找不到模块的任何版本。我试图通过 https//myartifactory/proxy_name-cache/.pypi/module_name 直接访问它,但我得到了 404.
https://jfrog.com/knowledge-base/how-to-fix-404-error-resource-has-expired/
我从这里了解了过期政策,实际上,如果我从之前的 URL 中删除 -cache,或者如果我改用我的虚拟存储库(没有登录 artifactory),该模块是已更新并且 pip 安装开始工作。
为什么 pip install 命令不触发更新模块并使其可下载的相同机制,我该如何解决这个问题?
@编辑
我会尽力解释得更好
我昨天从 pypi 填充了缓存。今天,这些工件被标记为已过期(我可以通过在 https//myartifactory/proxy_name-cache/.pypi/module_name.html 上发出请求看到 returns a 404)
因此,执行 pip install module_name 不起作用(无法找到满足要求的版本...)。
这是我的问题
事实是,如果我执行返回 404 错误的相同请求,但是在 proxy_name 或 virt_name 而不是 proxy_name-cache 上,那么 artifactory 会更新工件使用其上游版本,然后开始工作(直到再次标记为过期)
这种行为让我想知道为什么执行 pip 安装而不是简单请求(如 curl 或使用浏览器)也不会使用其上游版本更新工件
为了说明我的问题:
pip install -i https://myartifactory.net/api/pypi/virt/simple requests # Could not find a version...
curl https://myartifactory.net/pypi-cache/.pypi/requests.html # 404, resource has expired
curl https://myartifactory.net/virt/.pypi/requests.html # 200, returns the html page of versions, meaning it has updated the module with the upstream version
pip install -i https://myartifactory.net/api/pypi/virt/simple requests # Is now working
感谢您提供更多信息:)
所以这里的问题是 Artifactory 将 metadata/index 文件(在远程存储库上)标记为可过期,以确保 metadata/index 文件是最新的。
在您的情况下,您不想让用户能够更改数据,由他们自己从远程获取),因此您希望他们直接访问“-cache”存储库。
要实现您想要的效果,您可以move/copy 将远程存储库中的内容复制到本地存储库。这将确保 Artifactory 将计算元数据,并且它不会像在远程存储库中那样过期。
在复制的情况下,如果您担心 space 的重复,请不要因为 Artifactory 具有基于校验和的存储,这意味着您拥有多少个工件副本并不重要它只会在数据库中创建一个额外的指针,这意味着从原始文件到该指针的 link :)
我有一个只能由特定用户更新但所有人都可以访问的代理 pypi 存储库,我有一个私人 pypi 存储库和一个虚拟存储库来访问它们。
我的问题是一段时间后,虚拟仓库上的任何 pip 安装都会失败,找不到模块的任何版本。我试图通过 https//myartifactory/proxy_name-cache/.pypi/module_name 直接访问它,但我得到了 404.
https://jfrog.com/knowledge-base/how-to-fix-404-error-resource-has-expired/
我从这里了解了过期政策,实际上,如果我从之前的 URL 中删除 -cache,或者如果我改用我的虚拟存储库(没有登录 artifactory),该模块是已更新并且 pip 安装开始工作。
为什么 pip install 命令不触发更新模块并使其可下载的相同机制,我该如何解决这个问题?
@编辑
我会尽力解释得更好 我昨天从 pypi 填充了缓存。今天,这些工件被标记为已过期(我可以通过在 https//myartifactory/proxy_name-cache/.pypi/module_name.html 上发出请求看到 returns a 404)
因此,执行 pip install module_name 不起作用(无法找到满足要求的版本...)。
这是我的问题
事实是,如果我执行返回 404 错误的相同请求,但是在 proxy_name 或 virt_name 而不是 proxy_name-cache 上,那么 artifactory 会更新工件使用其上游版本,然后开始工作(直到再次标记为过期)
这种行为让我想知道为什么执行 pip 安装而不是简单请求(如 curl 或使用浏览器)也不会使用其上游版本更新工件
为了说明我的问题:
pip install -i https://myartifactory.net/api/pypi/virt/simple requests # Could not find a version...
curl https://myartifactory.net/pypi-cache/.pypi/requests.html # 404, resource has expired
curl https://myartifactory.net/virt/.pypi/requests.html # 200, returns the html page of versions, meaning it has updated the module with the upstream version
pip install -i https://myartifactory.net/api/pypi/virt/simple requests # Is now working
感谢您提供更多信息:)
所以这里的问题是 Artifactory 将 metadata/index 文件(在远程存储库上)标记为可过期,以确保 metadata/index 文件是最新的。
在您的情况下,您不想让用户能够更改数据,由他们自己从远程获取),因此您希望他们直接访问“-cache”存储库。
要实现您想要的效果,您可以move/copy 将远程存储库中的内容复制到本地存储库。这将确保 Artifactory 将计算元数据,并且它不会像在远程存储库中那样过期。
在复制的情况下,如果您担心 space 的重复,请不要因为 Artifactory 具有基于校验和的存储,这意味着您拥有多少个工件副本并不重要它只会在数据库中创建一个额外的指针,这意味着从原始文件到该指针的 link :)