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

Why is pip not utilizing metadata of sdist package?

当我为 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" 属性。这可能是你的镜像没有提供的信息,导致依赖解析有不同的选择。