为什么 pip 不使用 sdist 包的元数据?

问题描述

当我使用 pip认索引 URL 时,它正确理解包的某些版本与环境不兼容:

$ pip -v -i https://pypi.python.org/simple install setuptools
[...]
https://files.pythonhosted.org/packages/8f/6b/0dcf95d95086ce459152e4c0ac306f2dbbcf984177a2b8b77b320ebfbf22/setuptools-53.1.0.tar.gz#sha256=8181c4625cd58fa7817761e0fa60f6fa3adc4c437f5c25377b1aefa861ca15a2 (from https://pypi.org/simple/setuptools/) (requires-python:>=3.6)

这是预期的行为(选择了另一个合适的 setuptools 版本)。但是当我从自己的镜像安装时,选择了这个错误的版本:

$ pip -v -i https://my.pypi.mirror install setuptools
[...]
    Found link https://my.pypi.mirror/%2Bf/818/1c4625cd58fa7/setuptools-53.1.0.tar.gz#sha256=8181c4625cd58fa7817761e0fa60f6fa3adc4c437f5c25377b1aefa861ca15a2 (from https://my.pypi.mirror/+simple/setuptools/),version: 53.1.0
Using version 53.1.0

这些文件与其显示的 SHA256 总和相同。在第二种情况下 pip 未能正确使用包的元数据的原因是什么?

解决方法

您可能会遇到镜像未提供任何 requires-python 信息的情况。例如,查看 https://pypi.org/simple/setuptools 页面的源代码,并了解某些 <a> 标记(链接)如何具有 data-requires-python="&gt;=3.6" 属性。这可能是你的镜像没有提供的信息,导致依赖解析有不同的选择。