为什么在package.sys_tags()中较低的cp版本比没有实现规范的py版本具有更高的优先级?

问题描述 投票:0回答:1

来自文档:

对可迭代对象进行排序,以便最匹配的标签位于序列中的第一个。标签的确切优先顺序是特定于解释器的,但一般来说,标签重要性的顺序为:

  1. 口译员
  2. 平台
  3. 阿比

我希望 py310 在 cp39 之前,但是 pynn 总是在底部:

import packaging.tags
print(list(dict.fromkeys(i.interpreter for i in packaging.tags.sys_tags())))
['cp310',
 'cp39',
 'cp38',
 'cp37',
 'cp36',
 'cp35',
 'cp34',
 'cp33',
 'cp32',
 'py310',
 'py3',
 'py39',
 'py38',
 'py37',
 'py36',
 'py35',
 'py34',
 'py33',
 'py32',
 'py31',
 'py30']

这是否意味着如果我有旧包

cp36-abi3-manylinux_2_35_x86_64
和新包
py310-none-any
,鉴于当前系统是cp310,它实际上更喜欢旧包而不是新的py310-none-any?我无法理解这个问题。为什么顺序应该是这样的?

python python-packaging
1个回答
0
投票
  1. ... 旧套餐
    cp36-abi3-manylinux_2_35_x86_64
    和新套餐
    py310-none-any

这不会是“旧包”和“新包”,而更像是“特定于平台的包”和“通用包”。他们的年龄是一样的。

compat 标签与发行版本身的版本号无关。仅当已选择特定版本的包时,在确定可用文件的优先级时才会考虑这些。

  1. 为什么顺序要这样?

根据文档

建议安装程序默认情况下尝试选择功能最完整的可用构建发行版(最特定于安装环境的发行版),然后再回退到为旧版 Python 版本发布的纯 Python 版本。

大概,对于构建的发行版来说,您能承受的越具体,您就越有机会进行特定于平台的优化等。

© www.soinside.com 2019 - 2024. All rights reserved.