pypi工件的工件过期

2024-04-20 13:17:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个代理pypi存储库,它只能由特定用户更新,但所有用户都可以访问,我有一个私有pypi repo和一个虚拟repo来访问它们。在

我的问题是,过一段时间后,虚拟存储库上的任何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,或者改用我的虚拟存储库(没有登录到工件),模块就会更新,pip安装就会开始工作。在

为什么pip install命令不触发更新模块并使其可下载的相同机制?我如何解决这个问题?在

@编辑

我会尽量解释清楚的 我昨天从pypi填充了缓存。今天,这些构件被标记为过期(我可以通过在https//myartifactory/proxy_name-cache/.pypi/module上执行一个请求来看到这一点_名称.html返回404)

因此,使用pip安装模块名是行不通的(找不到满足要求的版本…)。在

这是我的问题

事实上,如果我执行返回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

Tags: 模块pipnamehttps版本pypicachenet
1条回答
网友
1楼 · 发布于 2024-04-20 13:17:33

感谢您提供更多信息:)

因此,这里的问题是Artifactory将元数据/索引文件(在远程存储库上)标记为可过期,以确保元数据/索引文件是最新的。在

在您的例子中,您不希望让用户能够更改数据,自行从远程获取数据),因此您希望他们直接指向'-cache'存储库。在

要实现所需内容,可以将内容从远程存储库移动/复制到本地存储库。这将确保Artifactory将计算元数据,并且它不会像在远程存储库中那样过期。在

在复制的情况下,如果您担心空间的重复,不要因为Artifactory有基于校验和的存储,这意味着不管您有多少个工件副本,因为它只会在数据库中创建一个额外的指针,即从原始文件到该指针的链接:)

相关问题 更多 >