pip 如何决定使用多少个 Linux 轮


现在

支持二进制多Linux轮:

https://github.com/pypa/manylinux

具体来说,我想在 Travis 上安装许多 linux 轮 for scipy,使用可靠的 beta 操作系统。车轮列在这里:

https://pypi.python.org/pypi/scipy/0.17.1

我得到:

Collecting scipy
  Downloading scipy-0.17.1.tar.gz (12.4MB)
    100% |████████████████████████████████| 12.4MB 100kB/s 

而不是:

Collecting scipy
  Downloading scipy-0.17.1-cp27-cp27mu-manylinux1_x86_64.whl (39.5MB)
    100% |████████████████████████████████| 39.5MB 37kB/s 

因此,为了解决此问题,我想知道pip如何确定要下载和安装哪个轮子。是的,我确实将 pip 更新到支持 二进制许多 Linux 轮子的版本 8.1.2。

具体来说,我对替代解决方案感兴趣,如果可以的话,请回答问题。

你需要 pip 8.1 或更高版本和一个基于 glibc 的 Linux 发行版(而不是像 alpine Linux 那样的 musl libc)。

编辑:函数pip._internal.utils.compatibility_tags.get_supported()应按顺序返回支持的平台标记列表。Pip 更喜欢在此列表中较早出现的轮子标签,而不是稍后出现的标签。

另外,我建议您使用python 3.5而不是2.7;)

从 pip 版本 19.3 开始, TargetPython.get_tags()回报支持的 PEP 425 标签,用于检查车轮候选(来源)。标记按优先顺序返回(最优先)。

from pip._internal.models.target_python import TargetPython
target_python = TargetPython()
pep425tags = target_python.get_tags()

类 TargetPython 封装了 Python 解释器的属性,该解释器面向包安装、下载等。

对于 pip 10,您需要运行:

from pprint import pprint
import pip._internal
pprint(pip._internal.pep425tags.get_supported())

因此,正确的答案是 pip 有一个支持的标签列表,并将尝试匹配这些标签。 pip.pep425tags.get_supported()将列出您平台的标签,并将使用该列表来匹配 manylinux 二进制轮子。

就我而言,我想安装dmlab2d-1.0-cp39-cp39-manylinux_2_31_x86_64.whl

python -m pip install dmlab2d-1.0-cp39-cp39-manylinux_2_31_x86_64.whl

但是,它显示了ERROR: dmlab2d-1.0-cp39-cp39-manylinux_2_31_x86_64.whl is not a supported wheel on this platform..我认为这可能与操作系统的版本有关。 我的是 Ubuntu 18。然后我试图在 dmlab2d-1.0-cp39-cp39-manylinux_2_31_x86_64.whl 中将 31 的数量更改为 24.它有效。

cp dmlab2d-1.0-cp39-cp39-manylinux_2_31_x86_64.whl dmlab2d-1.0-cp39-cp39-manylinux_2_24_x86_64.whl

我认为31适用于 Ubuntu 20,24适用于 Ubuntu 18。

PEP 600 被设计为"面向未来",并且不强制构建特定的符号和特定的发行版。它只声明标记为manylinux_x_y的轮子可以在任何基于 glibc>=x.y 的发行版上运行。manylinux项目支持:

  • manylinux_2_24 x86_64、i686、aarch64、ppc64le 和 s390x 的图像。
  • manylinux_2_28 x86_64、aarch64 和 ppc64le 的图像

请参阅说明:https://github.com/pypa/manylinux

最新更新