Calver for Python库。

pycalver的Python项目详细描述


pycalver:自动日历版本控制

pycalver是一个cli工具,用于搜索和替换 您的项目。

默认情况下,pycalver使用如下格式: v201812.0123-beta,但可以将其配置为生成版本字符串 有多种格式,包括Semver和其他Calver变体。

项目/回购:

mit license支持的python版本pycalver v201903.0030pypi releasespypi downloads

代码质量/ci:

构建状态用mypy检查类型代码覆盖率代码风格:sjfmt

<表><广告>名称角色自直到< /广告><正文>Manuel Barkhau(mbarkhau@gmail.com)作者/维护者2018-09年 -

用法

配置

设置项目的最快方法是使用pycalver init

$ pip install pycalver
...
Installing collected packages: click pathlib2 typing toml six pycalver
Successfully installed pycalver-201903.30

$ pycalver --version
pycalver, version v201903.0030

$ cd myproject
~/myproject$ pycalver init --dry
WARNING - File not found: pycalver.toml
Exiting because of '--dry'. Would have written to pycalver.toml:

    [pycalver]current_version="v201902.0001-alpha"version_pattern="{pycalver}"commit=truetag=truepush=true[pycalver.file_patterns]"README.md"=["{version}",
        "{pep440_version}",
    ]"pycalver.toml"=['current_version = "{version}"',
    ]

如果您已经有一个setup.cfg文件,那么init子命令将写入该文件 取而代之的是

~/myproject$ ls
README.md  setup.cfg  setup.py

~/myproject$ pycalver init
WARNING - Couldn't parse setup.cfg: Missing [pycalver] section.
Updated setup.cfg

这将在setup.cfg中添加如下内容 (取决于项目中已存在的文件):

# setup.cfg[pycalver]current_version="v201902.0001-alpha"version_pattern="{pycalver}"commit=Truetag=Truepush=True[pycalver:file_patterns]setup.cfg=    current_version = {version}setup.py=    "{version}",    "{pep440_version}",README.md=    {version}    {pep440_version}

这可能不会涵盖项目中使用的所有版本号,而且 必须手动将条目添加到pycalver:file_patterns中。某物 如下所示可能会说明您可能需要进行的其他更改 制作.< /P>

[pycalver:file_patterns]setup.cfg=    current_version = {pycalver}setup.py=    version="{pep440_pycalver}"src/mymodule_v*/__init__.py=    __version__ = "{pycalver}"README.md=    [PyCalVer {calver}{build}{release}]    img.shields.io/static/v1.svg?label=PyCalVer&message={pycalver}&color=blue

要查看是否找到模式,可以使用pycalver bump--dry 保持项目文件不变,只显示更改的差异 它本可以做到的。

$ pycalver bump --dry --no-fetch
INFO    - Old Version: v201901.0001-beta
INFO    - New Version: v201902.0002-beta
--- README.md
+++ README.md
@@ -11,7 +11,7 @@

 [![Supported Python Versions][pyversions_img]][pyversions_ref]
-[![Version v201901.0001][version_img]][version_ref]
+[![Version v201902.0002][version_img]][version_ref][![PyPI Releases][pypi_img]][pypi_ref]

--- src/mymodule_v1/__init__.py
+++ src/mymodule_v1/__init__.py
@@ -1,1 +1,1 @@
-__version__ ="v201901.0001-beta"
+__version__ ="v201902.0002-beta"

--- src/mymodule_v2/__init__.py
+++ src/mymodule_v2/__init__.py
@@ -1,1 +1,1 @@
-__version__ ="v201901.0001-beta"
+__version__ ="v201902.0002-beta"

--- setup.py
+++ setup.py
@@ -44,7 +44,7 @@
     name="myproject",
-    version="201901.1b0",
+    version="201902.2b0",
     license="MIT",

如果模式不匹配,bump将报告错误。

$ pycalver bump --dry --no-fetch
INFO    - Old Version: v201901.0001-beta
INFO    - New Version: v201902.0002-beta
ERROR   - No match for pattern 'img.shields.io/static/v1.svg?label=PyCalVer&message={pycalver}&color=blue'
ERROR   - Pattern compiles to regex 'img\.shields\.io/static/v1\.svg\?label=PyCalVer&message=(?P<pycalver>v(?P<year>\d{4})(?P<month>(?:0[0-9]|1[0-2]))\.(?P<bid>\d{4,})(?:-(?P<tag>(?:alpha|beta|dev|rc|post|final)))?)&color=blue'

还显示了内部使用的正则表达式,您可以使用它来调试问题,例如在regex101.com上。

模式搜索和替换

配置的pycalver:file_patterns部分用于搜索 以及替换项目文件中的版本字符串。除了 有效的占位符被视为文本。可用的占位符是:

<表><广告>占位符范围/示例 注释< /广告><正文>{pycalver}V201902.0001-β{pep440@u pycalver}201902.1亿{year}2019年…%y{yy}18、19..99、01、02%y{quarter}1、2、3、4{month}09、10、11、12%m{iso_week}00..53%w{us_week}00..53%u{dom}01..31%d{doy}001..366%j{build}.0123词法id{build_no}012312345<……< >{release}-α、-beta、-rc--释放=<;标记>;{释放标签}α,β,rc…{semver}1.2.3{major}1..9,10..99,100..--专业{minor}1..9,10..99,100..--小调{patch}1..9,10..99,100..--补丁

有一些限制要保留铭记:

  1. 版本字符串不能跨越多行。
  2. 占位符生成的字符不能转义。
  3. 时区总是UTC。

例如,缺少转义可能是徽章url的问题。 您可能需要在readme.md中输入以下文本(注意 shields.io将beta之前的两个"-"破折号解析为一个 文字"-"):

https://img.shields.io/badge/myproject-v201812.0116--beta-blue.svg

虽然您可以使用以下模式,但对于 而:

README.md=    /badge/myproject-v{year}{month}.{build_no}--{release_tag}-blue.svg

最终,当您在 以下哪一点将放在readme.md中:

https://img.shields.io/badge/myproject-v201812.0117--final-blue.svg

当您可能想要的是这个时(省略了--final标记):

$ pip install pycalver
...
Installing collected packages: click pathlib2 typing toml six pycalver
Successfully installed pycalver-201903.30

$ pycalver --version
pycalver, version v201903.0030

$ cd myproject
~/myproject$ pycalver init --dry
WARNING - File not found: pycalver.toml
Exiting because of '--dry'. Would have written to pycalver.toml:

    [pycalver]current_version="v201902.0001-alpha"version_pattern="{pycalver}"commit=truetag=truepush=true[pycalver.file_patterns]"README.md"=["{version}",
        "{pep440_version}",
    ]"pycalver.toml"=['current_version = "{version}"',
    ]
0

示例

测试模式的最简单方法是使用pycalver test子命令。

$ pip install pycalver
...
Installing collected packages: click pathlib2 typing toml six pycalver
Successfully installed pycalver-201903.30

$ pycalver --version
pycalver, version v201903.0030

$ cd myproject
~/myproject$ pycalver init --dry
WARNING - File not found: pycalver.toml
Exiting because of '--dry'. Would have written to pycalver.toml:

    [pycalver]current_version="v201902.0001-alpha"version_pattern="{pycalver}"commit=truetag=truepush=true[pycalver.file_patterns]"README.md"=["{version}",
        "{pep440_version}",
    ]"pycalver.toml"=['current_version = "{version}"',
    ]
1

如您所见,每个模式都在内部转换为 表达式。

pycalver test子命令接受与pycalver bump相同的cli标志以更新未自动更新的组件(例如。 基于日历)。

$ pip install pycalver
...
Installing collected packages: click pathlib2 typing toml six pycalver
Successfully installed pycalver-201903.30

$ pycalver --version
pycalver, version v201903.0030

$ cd myproject
~/myproject$ pycalver init --dry
WARNING - File not found: pycalver.toml
Exiting because of '--dry'. Would have written to pycalver.toml:

    [pycalver]current_version="v201902.0001-alpha"version_pattern="{pycalver}"commit=truetag=truepush=true[pycalver.file_patterns]"README.md"=["{version}",
        "{pep440_version}",
    ]"pycalver.toml"=['current_version = "{version}"',
    ]
2

注意,pypi/setuptools/pip将把版本字符串规范化为一种格式 定义见pep440。您可以使用与 注意,这些工具处理的版本字符串 不同。

版本状态

"当前版本"被认为是需要 存放在某处。通常这可能存储在版本中 文件,或存储库中的其他文件。这个 造成平行分支可能有不同的风险 国家。如果"当前版本"仅由 本地签出,可能会为 不同的提交。

为了避免这个问题,pycalver将vcs标记视为规范的/ ssot获取最新版本,并尝试 以最原子的方式改变这个状态。这就是为什么 pycalver命令的某些操作可能需要一段时间 与远程存储库同步以获取最新的 并尽快推送任何新版本标签。

当前版本

当前将被碰撞的版本定义为

  • 通常:词汇上最大的git/mercurial标记,它与 版本模式来自您的配置。
  • 最初:在创建任何标记之前(或者您没有使用 支持VCS),在setup.cfg中pycalver.current_version的值/ pyproject.toml/pycalver.toml

作为执行pycalver bump的一部分,本地VCS索引将使用 git fetch——标记/hg pull。这降低了一些标签 本地未知,因此同一版本字符串不太可能是 为不同的提交生成,这将导致不明确的版本 标签。如果多个维护人员同时生成一个版本,则可能会发生这种情况 一个生成系统被多次触发和多次生成 彼此同时运行。对于一个小项目(只有一个 维护者和无构建系统)这不是问题,您可以始终使用 -n/--no fetch跳过更新标记。

$ pip install pycalver
...
Installing collected packages: click pathlib2 typing toml six pycalver
Successfully installed pycalver-201903.30

$ pycalver --version
pycalver, version v201903.0030

$ cd myproject
~/myproject$ pycalver init --dry
WARNING - File not found: pycalver.toml
Exiting because of '--dry'. Would have written to pycalver.toml:

    [pycalver]current_version="v201902.0001-alpha"version_pattern="{pycalver}"commit=truetag=truepush=true[pycalver.file_patterns]"README.md"=["{version}",
        "{pep440_version}",
    ]"pycalver.toml"=['current_version = "{version}"',
    ]
3

提高音量

要增加当前版本并发布新版本,可以使用 pycalver bump子命令。bumppycalver配置中配置 章节:

$ pip install pycalver
...
Installing collected packages: click pathlib2 typing toml six pycalver
Successfully installed pycalver-201903.30

$ pycalver --version
pycalver, version v201903.0030

$ cd myproject
~/myproject$ pycalver init --dry
WARNING - File not found: pycalver.toml
Exiting because of '--dry'. Would have written to pycalver.toml:

    [pycalver]current_version="v201902.0001-alpha"version_pattern="{pycalver}"commit=truetag=truepush=true[pycalver.file_patterns]"README.md"=["{version}",
        "{pep440_version}",
    ]"pycalver.toml"=['current_version = "{version}"',
    ]
4

此配置适用于创建提交

  1. 包含对版本字符串的更改,
  2. 不包含其他更改(与碰撞版本无关),
  3. 被标记为新版本,
  4. 有版本标签这在存储库中是独一无二的。

为了确保提交中只更改了版本字符串, 你需要确保你有一个干净的VCS结帐时,你调用 pycalver bump

bump执行的步骤是:

  1. 检查您的回购协议是否没有任何本地更改。
  2. 从原点获取最新的全局VCS标记 (-n/--不获取禁用)。
  3. 生成新版本,从当前版本递增。
  4. 更新文件模式中配置的所有文件中的版本字符串
  5. 提交更新的版本字符串。
  6. 标记新提交。
  7. 新的提交和标记。

同样,您可以使用--dry首先检查更改。

$ pip install pycalver
...
Installing collected packages: click pathlib2 typing toml six pycalver
Successfully installed pycalver-201903.30

$ pycalver --version
pycalver, version v201903.0030

$ cd myproject
~/myproject$ pycalver init --dry
WARNING - File not found: pycalver.toml
Exiting because of '--dry'. Would have written to pycalver.toml:

    [pycalver]current_version="v201902.0001-alpha"version_pattern="{pycalver}"commit=truetag=truepush=true[pycalver.file_patterns]"README.md"=["{version}",
        "{pep440_version}",
    ]"pycalver.toml"=['current_version = "{version}"',
    ]
5

如果一切正常,您可以执行pycalver bump

$ pip install pycalver
...
Installing collected packages: click pathlib2 typing toml six pycalver
Successfully installed pycalver-201903.30

$ pycalver --version
pycalver, version v201903.0030

$ cd myproject
~/myproject$ pycalver init --dry
WARNING - File not found: pycalver.toml
Exiting because of '--dry'. Would have written to pycalver.toml:

    [pycalver]current_version="v201902.0001-alpha"version_pattern="{pycalver}"commit=truetag=truepush=true[pycalver.file_patterns]"README.md"=["{version}",
        "{pep440_version}",
    ]"pycalver.toml"=['current_version = "{version}"',
    ]
6

pycalver格式

版本字符串的pycalver格式有三部分:

$ pip install pycalver
...
Installing collected packages: click pathlib2 typing toml six pycalver
Successfully installed pycalver-201903.30

$ pycalver --version
pycalver, version v201903.0030

$ cd myproject
~/myproject$ pycalver init --dry
WARNING - File not found: pycalver.toml
Exiting because of '--dry'. Would have written to pycalver.toml:

    [pycalver]current_version="v201902.0001-alpha"version_pattern="{pycalver}"commit=truetag=truepush=true[pycalver.file_patterns]"README.md"=["{version}",
        "{pep440_version}",
    ]"pycalver.toml"=['current_version = "{version}"',
    ]
7

一些示例:

$ pip install pycalver
...
Installing collected packages: click pathlib2 typing toml six pycalver
Successfully installed pycalver-201903.30

$ pycalver --version
pycalver, version v201903.0030

$ cd myproject
~/myproject$ pycalver init --dry
WARNING - File not found: pycalver.toml
Exiting because of '--dry'. Would have written to pycalver.toml:

    [pycalver]current_version="v201902.0001-alpha"version_pattern="{pycalver}"commit=truetag=truepush=true[pycalver.file_patterns]"README.md"=["{version}",
        "{pep440_version}",
    ]"pycalver.toml"=['current_version = "{version}"',
    ]
8

这种略显冗长的格式在某种程度上是为了区别于 其他的,这样您的包的用户一眼就能看到您的项目 将努力维护一个真正重要的语义:更新== 更好

为了让你相信不破坏东西的好处,这里有一些 Pycalver的灵感来源:

解析

可以使用以下正则表达式分析这些版本字符串:

$ pip install pycalver
...
Installing collected packages: click pathlib2 typing toml six pycalver
Successfully installed pycalver-201903.30

$ pycalver --version
pycalver, version v201903.0030

$ cd myproject
~/myproject$ pycalver init --dry
WARNING - File not found: pycalver.toml
Exiting because of '--dry'. Would have written to pycalver.toml:

    [pycalver]current_version="v201902.0001-alpha"version_pattern="{pycalver}"commit=truetag=truepush=true[pycalver.file_patterns]"README.md"=["{version}",
        "{pep440_version}",
    ]"pycalver.toml"=['current_version = "{version}"',
    ]
9

递增行为

要查看版本字符串是如何递增的,可以使用 pycalver测试

~/myproject$ ls
README.md  setup.cfg  setup.py

~/myproject$ pycalver init
WARNING - Couldn't parse setup.cfg: Missing [pycalver] section.
Updated setup.cfg
0

这是一个简单的例子:

  • 日历组件将更新为当前年度,并且 月.
  • 内部版本号增加1。
  • 可选的释放标记保持原样。

您可以使用 --release=<;标记>;参数:

~/myproject$ ls
README.md  setup.cfg  setup.py

~/myproject$ pycalver init
WARNING - Couldn't parse setup.cfg: Missing [pycalver] section.
Updated setup.cfg
1

为了维护版本号的词法顺序,将填充版本号 加上额外的零(请参见词法id)。

词法id

内部版本号填充可能最终耗尽。为了保存 词法排序,模式的内部版本号是 以一种特殊的方式递增。举例也许能说明更多 显然,

~/myproject$ ls
README.md  setup.cfg  setup.py

~/myproject$ pycalver init
WARNING - Couldn't parse setup.cfg: Missing [pycalver] section.
Updated setup.cfg
2

这里发生的是最左边的数字是递增的 早/先发制人。当最左边的数字发生变化时, 通过11的乘法来展开ID的。

~/myproject$ ls
README.md  setup.cfg  setup.py

~/myproject$ pycalver init
WARNING - Couldn't parse setup.cfg: Missing [pycalver] section.
Updated setup.cfg
3

此行为确保始终保留以下语义: 新版本>;旧版本。这是真的,不考虑填充 膨胀。为了说明这个解决的问题,考虑一下会发生什么 如果我们不展开填充,而是按数字递增。

~/myproject$ ls
README.md  setup.cfg  setup.py

~/myproject$ pycalver init
WARNING - Couldn't parse setup.cfg: Missing [pycalver] section.
Updated setup.cfg
4

在这里,我们最终会遇到一个内部版本号,其中词法顺序是 不保留,因为"10000">;"9999"==false(因为字符串"1" 在词汇上小于"9")。有足够大的填充物这可能是 没有问题,但最好不要去想它。

就像一个词法排序是一个很好的属性的例子, 有很多软件可以读取git标签,但是没有逻辑 分析版本字符串。尽管如此,这个软件仍然可以订购版本标签 正确使用常用的词法顺序。最基本的 level允许您使用unixsort命令,例如解析 VCS标签。

~/myproject$ ls
README.md  setup.cfg  setup.py

~/myproject$ pycalver init
WARNING - Couldn't parse setup.cfg: Missing [pycalver] section.
Updated setup.cfg
5

这种排序甚至可以在javascript中正常工作!

~/myproject$ ls
README.md  setup.cfg  setup.py

~/myproject$ pycalver init
WARNING - Couldn't parse setup.cfg: Missing [pycalver] section.
Updated setup.cfg
6

pycalver的语义

< Buff行情>

免责声明:这一部分当然只能是有抱负的。什么都没有 防止包维护者发布具有不同 语义比这里所呈现的要多。

pycalver比semver给包维护者带来更大的负担。 版本字符串中没有编码向后不兼容,因为 维护人员不应故意引入中断性更改。这个 对于软件包的用户来说是很好的,他们可以减少对更新的担心 导致他们的计划破裂。一个偏执的用户当然仍然可以锁定 一个已知的好版本,冻结部署依赖项仍然是 好的实践,但是对于开发,用户最好不需要任何 Requirements.txt中的版本说明符。这样他们总能得到 最新的错误修复和功能。

部分原因是因为这个与众不同的pycalver版本字符串 用户只需通过查看版本字符串就能识别, 一个一揽子计划带来的承诺(或者至少是愿望) 不会中断,用户更新是安全的。把这个比作一个 版本字符串,其中维护者明确声明更新可能 中断他们的程序,他们可能需要在 更新,即使以前没有,包维护人员 预计他们将来可能会做出如此重大的改变。

换句话说,包的用户有责任更新其 软件,如果他们想更新到包的最新版本。用 pycalver软件包维护者有责任向后维护 兼容性。

理想情况下,用户可以信任维护者的承诺,即 语义总是正确的:

  • 较新版本兼容。
  • 更新版本的错误更少。
  • 更新版本具有更多功能。
  • 较新的具有相同或更好的性能。

唉,世界并不理想。那么用户和维护人员如何处理更改 违反了这些承诺?

有意中断更改

< Buff行情>

名称空间是一个非常好的主意

  • 让我们做更多的这些!

  • 蟒蛇之禅

如果必须对包进行中断更改,而不是递增 数字,使用pycalver的建议方法是创建一个全新的 命名空间。换言之,主版本成为 模块,甚至包的模块。通常你可以加上一个数字后缀。 mypkg->;mypkg2

对于python发行版,可以包括多个模块 像这样的包裹。

~/myproject$ ls
README.md  setup.cfg  setup.py

~/myproject$ pycalver init
WARNING - Couldn't parse setup.cfg: Missing [pycalver] section.
Updated setup.cfg
7

换言之,你可以把旧版本和新版本并排运送, 用户可以导入他们需要的任何一个。或者您可以发布 一个新的包发行版,具有新的名称空间,但也请考虑 重命名模块。

~/myproject$ ls
README.md  setup.cfg  setup.py

~/myproject$ pycalver init
WARNING - Couldn't parse setup.cfg: Missing [pycalver] section.
Updated setup.cfg
8

如果import mypkg2 足以确定项目正在使用的版本。进一步 创建多个模块的好处是用户可以导入旧的和 同一环境中的新模块,可以使用一些依赖于 对旧版本以及一些依赖于新版本的。这个 用户的缺点是,他们可能必须对自己的 编码,即使中断更改不会影响它们。

αααα29

成本和效益

如果这看起来有点过分,因为这对你 维护人员,首先考虑在您的工具上投入一些时间,所以 尽可能减少创建新包所需的后续工作。我已经为 我的个人项目,但您可能会发现其他 使其更适合您的使用。

如果因为你不相信 对用户来说很小的负担是一件大事,想想你自己 项目可能间接依赖于数十个库,而您从未 甚至听说过。如果每个维护人员只引入一次中断更改 每年,只依赖于十几个图书馆的用户都要面对 包装问题每个月!换句话说:破坏东西是一件大事 处理< > >。对一些维护人员来说,额外的努力似乎是公平的 为了降低对许多用户的影响,他们非常乐意 继续使用旧代码,直到他们决定何时升级。

无意中断的更改

另一种破坏性的变化是非故意的,否则 被称为"错误"或"回归"。首先要意识到 任何版本控制系统都无法对已发生的情况进行编码: 因为维护人员并不是故意引入一个bug,所以他们自然不能 更新他们的版本号以反映他们不知道的内容。相反 我们必须在事后处理这些问题。

包维护人员可以做的第一件事是将 对用户使用有缺陷的软件。在任何不平凡的(潜在的破坏)之后 更改时,最好先创建-alpha/-beta/-rc版本。 这些所谓的--pre版本只供少数人下载 勇敢者:那些愿意参加测试的人。任何问题之后 通过--pre版本进行修正,可以为 更广泛的公众。

注意,pip install<;package>;的默认行为(不带任何版本 specifier)是下载最新的final版本。它将下载--pre 只有在

  1. 没有最终版本版本可用
  2. 显式使用--pre标志,或
  3. 如果需求说明符显式地包含 预发布,例如pip install mypkg==v201812.0007-alpha

如果一个版本包含了一个bug(天堂禁止,尽管有所有的预防措施)。 然后,维护者应该发布一个新的版本来修复这个bug 或恢复更改。如果用户以前下载了 包中包含了这个bug,他们只需执行pip install--upgrade<;package>;即可解决问题。

也许时间线会更清楚地说明:

# setup.cfg[pycalver]current_version="v201902.0001-alpha"version_pattern="{pycalver}"commit=Truetag=Truepush=True[pycalver:file_patterns]setup.cfg=    current_version = {version}setup.py=    "{version}",    "{pep440_version}",README.md=    {version}    {pep440_version}
0

在最坏的情况下,一个变化会被发现向后突破 兼容性,但这一变化仍然被认为是可取的。在那 要点是,应重新发布以还原更改。

这允许1。的用户暴露在更新到 最新版本,并再次获得旧(工作)代码,和2。的用户不是 暴露在破坏性变化中,甚至不知道任何东西被破坏。

记住,我们的目标是让那些 作为依赖项的包。如果有什么问题 应该做的是pip install--update。如果这不起作用,他们可能 必须暂时固定到已知的好版本,直到固定版本 已发布。

在这场大火被扑灭之后是 值得保留,然后创建一个新模块甚至一个新包。这个 包可能与前一个和旧的包有99%的重叠 最终可能会被抛弃。

# setup.cfg[pycalver]current_version="v201902.0001-alpha"version_pattern="{pycalver}"commit=Truetag=Truepush=True[pycalver:file_patterns]setup.cfg=    current_version = {version}setup.py=    "{version}",    "{pep440_version}",README.md=    {version}    {pep440_version}
1

固定不是灵丹妙药

通过使用pip freeze创建包含包的文件来冻结依赖项 固定到特定版本号对于获得稳定且可重复的 展开。

Pinning的主要问题是它是强加给用户的另一个负担, 这是一个只有一些人才能承担的负担。绝大多数 用户要么1)锁定其依赖项并更新它们,而不确定 已更改,或者更新对他们来说是安全的,或者2)锁定他们的依赖项和 忘了他们吧。在案例1中,唯一的好处是用户至少可以 知道更新发生的时间,因此它们可能会关联到 在他们的软件中可能与最近的更新有关。除此之外,保持 在依赖关系和更新上加上标签而不加注意,几乎没有比不加注意更好的了。 完全被钉住了。在案例2中,一笔无法逾越的债务将会堆积起来, 项目的依赖关系在过去基本上被冻结。

是的,如果用户有足够的测试,他们确实会过得更好 覆盖率,以确定他们的代码即使在 它们的依赖关系将被更新。然而,一个包 维护人员通常能够更好地判断更改是否会导致 一些要打破的东西。

Zeno的1.0和永恒的beta版

向后兼容有两种相反的方法 它们使用的版本号中的反射。对于Semver,如果 project承诺向后兼容,它可能永远不会 导致Zeno 1.0 悖论。另一方面是避免 致力于向后兼容并永远保留"beta"标签。

当然,没有报酬的开源开发人员不欠任何人 致力于向后兼容。尤其是当一个项目还年轻的时候 而经历了重大变革,这样的承诺可能毫无意义。 对于这些情况,你仍然可以使用pycalver,只要 在你的自述文件顶部有一个警告,你的项目还没有准备好 尚未生产。

注意,被认为是 处于"beta"状态,并且有一个-beta标签的单独版本。这些 不是同样的意思。在发布python包的情况下, 发布标签(-alpha-beta-rc)说明了稳定性 特定的释放。这是类似的(也许 与cpython使用的释放标记的含义相同 翻译。发布标签不是关于一般稳定性的声明 在整个软件中,它是关于特定版本的元数据 包的制品,例如a.whl文件。

https://gitlab.com/mbarkhau/pycalver的更改日志

V201903.0030

  • 修正:使用配置中的模式而不是硬编码的{pycalver}模式。
  • 修正:更好的git/hg错误信息。
  • add:配置文件的隐式默认模式。

V201903.0028

  • 修正:当配置的文件不受版本控制时,添加警告。
  • 添加:凹凸的彩色输出--干燥

V201902.0027

  • 修正:allow--release=post
  • 修正:错误模式的错误报告更好
  • 修正:正则表达式转义问题"?"

V201902.0024

  • 添加:支持文件模式中的globs。
  • 修正:更好的错误报告无效配置。

V201902.0020

  • 添加:支持更多自定义版本模式。

V201812.0018

  • 修正:使用"-final"版本更好地处理模式替换。

V201812.0017

  • 修复了github上的2。pycalver init已损坏。
  • 修复了模式转义问题。
  • 为cli添加了更多测试。
  • 已清理文档。

V201812.0011-β

  • 使用git/hg添加版本标签。
  • 使用git/hg标记作为最新版本的ssot。
  • 开始使用https://gitlab.com/mbarkhau/bootstrapit" rel="nofollow">https://gitlab.com/mbarkhau/bootstrapit
  • 转到https://gitlab.com/mbarkhau/pycalver

V201809.0001-α

  • 初始版本

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
手机上的html调试Java web应用程序   Java当前日期和过去日期之间的差值,以年、月、日、小时、分、秒为单位   如果方法名称相同,java如何使扩展类不从上面的类触发方法?   即使在提供了准确的firebase引用之后,java仍出现“无法跳转到类型”异常。请看详情   jar文件中的java图像   java如何避免从缓存读取时修改相同的对象实例?   Android中java完全控制的线程队列   JTextArea中的java计算   java如何独立运行。jar作为64位mashine上的32位   java在尝试实例化自引用泛型类的实例时,如何处理自引用类型参数   java如何安装着色jar而不是原来的jar   java在resultSet之后使用If-Else   多线程是java。朗,反思一下。方法调用线程安全   java 7语言向后兼容性   Objective C中的Category和Java 8中的Default方法是否等效?