我该如何在发布之间设置版本号?

5 投票
3 回答
3024 浏览
提问于 2025-04-18 10:16

我在GitHub上有一个Python项目(ModelicaRes)。我想遵循语义化版本控制的规则。我会在主要项目网站上发布版本,并把它们上传到PyPI。对于这些版本,我会在主文件__init__.py中写上版本号(__version__=...)。在发布版本之间,我会把更新推送到GitHub(通常是在主分支上——没什么特别的)。

那么,我该如何为这些版本之间的更新设置版本号呢?这些提交通常是工作中的版本。它们还没有经过全面测试,但其他人可能会下载并使用这些版本(通过GitHub)。通常情况下,我还没准备好确定新的版本号。最近,我把版本号设置为None,并在根文件夹中放一个自动生成的“未发布副本”文件,里面有提交日期和其他信息。不过,我并不确定这是否是最好的方法。

这可能也适用于其他编程语言,但现在我只对Python感兴趣。

我想我可以尝试在下一个版本号上加上“alpha”、“beta”或“rc”的后缀,但我并不总是知道下一个版本号(可能是大版本、小版本或仅仅是修复)。我也想保持简单——不想有太多分支等等。

谢谢!

3 个回答

-2

如果你在提交的代码还没有“发布”,那么你就没有遵循语义版本控制(SemVer)。根据语义版本控制的规则,每次更新都应该算作一次发布:如果是增加了新的功能,而且这些功能和之前的版本兼容,那就是一个小版本更新,比如 2.1.0;如果是修复了一个bug,那就是一个补丁更新,比如 2.1.1

0

丹尼尔说得不太对:语义版本控制确实支持预发布版本(我强调一下):

(11)优先级是指在比较版本时,版本之间的排序方式。优先级必须通过将版本分成主版本号、次版本号、补丁号和预发布标识符来计算,顺序是这样的(构建元数据不参与优先级的计算)。优先级是通过从左到右比较这些标识符时的第一个不同点来确定的,具体如下:主版本号、次版本号和补丁号总是按数字比较。例如:1.0.0 < 2.0.0 < 2.1.0 < 2.1.1。当主版本号、次版本号和补丁号相等时,预发布版本的优先级低于正常版本。例如:1.0.0-alpha < 1.0.0。对于两个主版本号、次版本号和补丁号相同的预发布版本,优先级必须通过从左到右比较每个用点分隔的标识符,直到找到不同点,具体如下:仅由数字组成的标识符按数字比较,而包含字母或连字符的标识符按ASCII排序比较。数字标识符的优先级总是低于非数字标识符。如果所有前面的标识符都相等,预发布字段越多,优先级越高。例如:1.0.0-alpha < 1.0.0-alpha.1 < 1.0.0-alpha.beta < 1.0.0-beta < 1.0.0-beta.2 < 1.0.0-beta.11 < 1.0.0-rc.1 < 1.0.0。

14

目前关于Python包和分发版本管理的建议,可以在Python打包用户指南中找到:

1.2.0.dev1  # Development release
1.2.0a1     # Alpha Release
1.2.0b1     # Beta Release
1.2.0rc1    # Release Candidate
1.2.0       # Final Release
1.2.0.post1 # Post Release
15.10       # Date based release
23          # Serial release

这些建议是基于草案PEP 440的。

撰写回答