如果Python版本可能包含3个以上的字符,那么PEP 508中环境标记变量`python_version`的定义是什么?

时间:2018-01-05 18:28:30

标签: python pip requirements.txt

我偶然发现了一个简单的问题。它并不是很重要,但我对此的原因感兴趣并且尚未找到快速答案。

根据PEP 508 -- Environment Markers (section "Specification" - "Environment markers")标记变量python_version定义为platform.python_version()[:3]

因此,对于Python 3.5.2,python_version将是3.5

但是,如果主要版本号或次要版本号高于9,该怎么办?版本号将包含3个以上的字符,[:3]将裁剪它。这不是未来Python版本的可能性吗?

为什么不使用".".join(platform.python_version().split(".", 2)[:2])之类的东西,这些东西看起来仍然非常基本,并且不会使代码过于复杂?

1 个答案:

答案 0 :(得分:0)

我确信这只是用于文档目的的疏忽或简化。 意图显然是提供major.minor版本字符串。

请注意,从历史上看,永远不会是带有两位数的次要版本号。到目前为止,Python始终只使用一位数进行管理。到目前为止,最高的数字是1.62.73.7。这并不是说将来永远不会有3.10,但到目前为止,它还没有出现。

我想象一下使用platform.python_version_tuple()的实际实现:

return '.'.join(platform.python_version_tuple()[:2]

major, minor, patch = platform.python_version_tuple()
return '{}.{}'.format(major, minor)

但是,这两种形式都更加冗长,以适应PEP表格列,目的是记录而不是规定代码。

如果有疑问,请写入Python-dev邮件列表。我敢肯定,如果这个问题变得如此混乱,可以调整PEP。

至于pip;它使用售卖的packaging library来处理具有implemented the python_version marker verbatim as specced in the PEP的环境标记。如果您对此感到强烈,可以在那里提出问题,PEP维护人员对该项目非常积极。

请注意,仍有充足的时间。到目前为止,3.x版本每个需要大约18个月才会出现(3.2:2011-02,3.3:2012-09,3.4:2014-03,3.5:2015-09,3.6:2016-12,3.7:预计2018- 06),所以我们有5年左右的时间来解决这个问题。