我偶然发现了一个简单的问题。它并不是很重要,但我对此的原因感兴趣并且尚未找到快速答案。
根据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])
之类的东西,这些东西看起来仍然非常基本,并且不会使代码过于复杂?
答案 0 :(得分:0)
我确信这只是用于文档目的的疏忽或简化。 意图显然是提供major.minor
版本字符串。
请注意,从历史上看,永远不会是带有两位数的次要版本号。到目前为止,Python始终只使用一位数进行管理。到目前为止,最高的数字是1.6
,2.7
和3.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年左右的时间来解决这个问题。