我试着让1.7.0在1.7.0.rc0之后,但在1.8.0之前,如果你对版本进行排序的话。我认为loosversion的关键是它正确地处理了这种事情的排序和比较。
>>> from distutils.version import LooseVersion
>>> versions = ["1.7.0", "1.7.0.rc0", "1.8.0"]
>>> lv = [LooseVersion(v) for v in versions]
>>> sorted(lv, reverse=True)
[LooseVersion ('1.8.0'), LooseVersion ('1.7.0.rc0'), LooseVersion ('1.7.0')]
主要编辑:旧答案太不通俗。这里有两个更漂亮的解决方案。
所以,我现在看到了三种实现预定的方法,在实际发布之前发布候选“rc”。
StrictVersion
Version
类以添加对任意标记和标记排序的支持一。旧式命令式排序
有了这个我得到:
2。用“b”代替“rc”
如果允许您的
1.7.0.rc0
以1.7.0a0
或1.7.0b0
的形式写入,包distutils.version
也有另一个类StrictVersion
来执行任务,该类记录alpha或beta版本。即:
这就提供了:
可以使用re模块完成从一个表单到另一个表单的转换。
三。扩展版本类
先前解决方案的明显问题是
StrictVersion
缺乏灵活性。更改version_re
类属性以使用rc
而不是a
或b
,即使它接受1.7.1rc0
,仍然将其打印为1.7.1r0
(从python 2.7.3开始)。我们可以通过实现自己的自定义版本类来实现它。可以这样做,通过一些单元测试来确保正确性,至少在某些情况下:
所以,可以这样使用:
输出:
因此,总之,使用python自带的电池或推出自己的电池。
关于这个实现:可以通过处理发行版中的尾随零来改进它,并记住正则表达式的编译。
从文件中
所以你看特别对待“rc”是不明智的
你可以看到版本号是如何被这样分解的
我像这样使用pkg_resources模块:
请注意,从预期版本列表中创建随机顺序会使这成为一个潜在的不稳定单元测试,因为两次运行将不会有相同的数据。不过,在这种情况下,这并不重要……希望如此。
相关问题 更多 >
编程相关推荐