DEBUG.WIKI
京东云;让 AI 进入真实业务;零售 · 物流 · 客服 · 硬件;查看方案 →
ZgoCloud:多地区部署,按需选节点;日本、美国、香港、德国
Evoxt;最高 6.0GHz CPU;高频云服务器 · 免费每周备份;查看配置 →

pip list 忽略 uploaded-prior-to,核对最新版查询的冷却过滤

pip list 的旧路径接受上传时间截止选项,却没有将它传给候选查找器。采用修复版本,核对同一索引的上传元数据和列表查询结果。

设置了 --uploaded-prior-to=P60D,pip list --outdated 仍把刚上传不久的版本列为 Latest,而 pip install --dry-run 在同一截止条件下选择较旧版本。遇到这种差异,先确认列表查询有没有把上传时间过滤传给候选查找器,不必先清理环境里所有已安装包。

pip 26.1.2 的这条路径会读取选项,但构造列表命令使用的 PackageFinder 时漏传 uploaded_prior_to。结果是命令正常退出、表格也正常生成,Latest 列却没有遵守要求的冷却窗口。安装解析路径已经传入这个条件,所以两个入口会出现不同结果。

pip 26.2.1 的正式代码包含对应转发修补,--outdated 与 --uptodate 查询都涉及这一步。可在项目的工具环境中固定版本:

python -m pip install "pip==26.2.1"
python -m pip --version

用固定截止时间核对候选

相对天数会随着执行时间变化。复查时可采用固定 UTC 截止,保存原来的索引、平台和其他筛选参数。例如,环境已装有 ae-base,需要检查该包在截止前是否有可用更新:

python -m pip list --outdated \
  --uploaded-prior-to=2026-05-20T00:00:00Z --format=json

python -m pip install --dry-run --ignore-installed \
  --uploaded-prior-to=2026-05-20T00:00:00Z ae-base

包名应换成真实需要检查的发行包。第二条是候选解析对照,不执行安装;仍可能读取索引和下载解析所需的元数据。固定截止时刻用于让两次查询接受同一个条件,不表示这个日期是所有项目应采用的更新政策。

检查 Latest 对应产物的上传时间,确认没有把截止后才上传的候选当作允许更新。原病例中的具体版本号属于当时的索引状态,不能拿来当今天必然出现的输出。若当前已装版本比截止前允许的最新版本还新,包不出现在 outdated 列表中,也可能是正确结果。

这里要求对照的是上传时间过滤是否生效,不是承诺两条命令的完整结果总相同。安装解析还会考虑依赖约束,列表命令的输出则受当前已安装包、可用产物和其他选项影响;要保留这些差异,避免把另一种候选排除误认成旧回归仍在。

这项选项依赖索引提供 upload-time 元数据。只有安装文件链接、没有对应时间信息的索引,不能凭一个命令选项证明已经落实冷却政策。先核对实际读取的索引能力,镜像的元数据也需要单独确认。

冷却只限制候选的上传时间,不判断包是否安全、代码是否兼容,也不替代项目的版本审查。验收完成后,继续通过原锁定与测试流程决定是否更新;不要直接把 Latest 列批量写进生产依赖。