更新时间:2022-10-13 17:53:10
本节书摘来自异步社区《Python高手之路》一书中的第1章,第1.3节,作者[法]Julien Danjou(朱利安•丹乔), 王飞龙 译,更多章节内容可以访问云栖社区“异步社区”公众号查看。
可能你已经有所了解,Python生态系统中正在对包的元数据进行标准化。其中的一项元数据就是版本号。
PEP 440(http://www.python.org/dev/peps/pep-0440/ )针对所有的Python包引入了一种版本格式,并且在理论上所有的应用程序都应该使用这种格式。这样,其他的应用程序或包就能简单而可靠地识别它们需要哪一个版本的包。
PEP440中定义版本号应该遵从以下正则表达式的格式:
N[.N]+[{a|b|c|rc}N][.postN][.devN]
它允许类似1.2或1.2.3这样的格式,但需注意以下几点。
最终即将发布的组件也可以使用下面这种格式。
通常用到的还有以下这些后缀。
这一结构可以满足大部分常见的使用场景。
注意
你可能已经听说过语义版本(http://semver.org/),它对于版本号提出了自己的规则。这一规范和PEP 440部分重合,但二者并不完全兼容。例如,语义版本对于预发布版本使用的格式1.0.0.-alpha+001就与PEP 440不兼容。
如果需要处理更高级的版本号,可以考虑一下PEP 426(http://www.python.org/dev/peps/pep-0426 )中定义的源码标签,这一字段可以用来处理任何版本字符串,并生成同PEP要求一致的版本号。
许多分布式版本控制系统(Distributed Version Control System,DVCS)平台,如Git和Mercurial,都可以使用唯一标识的散列字符串1作为版本号。但遗憾的是,它不能与PEP 440中定义的模式兼容:问题就在于,唯一标识的散列字符串不能排序。不过,是有可能通过源码标签这个字段维护一个版本号,并利用它构造一个同PEP 440兼容的版本号的。
提示
pbr(即Python Build Reasonableness,https://pypi.python.org/pypi/pbr)将在4.2节中讨论,它可以基于项目的Git版本自动生成版本号。