如何在 Azure DevOps 工件的轮版本号中包含分支名称?
How can I include a branch name in a wheel version number for Azure DevOps artifacts?
我的目标是为 python 车轮版本提供正常版本号,如 1.0.0
,并为特定分支提供特定于分支的版本号,如 1.0.0.dev1+hg.5.b11e5e6f0b0b
.
不幸的是,Azure DevOps 拒绝大多数版本号无效,并显示以下两条错误消息之一:
HTTPError: 400 Client Error: Bad Request - The package version provided is invalid. Versions should conform to the format described in PEP 440 and be under 128 characters. (DevOps Activity ID: 0000000-AAAA-2222-3333-11111111111) for url: https://pkgs.dev.azure.com/sample/_packaging/sample_libraries/pypi/upload
for version numbers like:
version='1.0.0.1.dev', ok
version='1.0.0.1.dev1', ok
version='1.0.0.1.dev_2', ok
version='1.0.0.1.dev_2_b', FAIL
version='1.0.0.1.dev_2-3', FAIL
version='1.0.0.1.dev_2.3', FAIL
version='1.0.0.1.dev_2.3', FAIL
version='1.0.0.d1.dev', FAIL
version='1.0.0.d.dev', FAIL
version='1.0.0.1d1.dev', FAIL
version='1.0.0.1d1.dev1', FAIL
version='1.0.0.1.dev1-3', FAIL
version='1.0.0.1.dev1.3', FAIL
version='1.0.0.1.dev1.3', FAIL
version='1.0.0.1.1.3', ok
version='1.0.0.1.1-3.3', FAIL
400 Client Error: Bad Request - The package version provided is invalid. Local version segments are not allowed.
for version numbers like: 1.0.0+33
Azure 管道只接受上面部分中标有 "ok" 的版本号。
有什么办法解决这个问题吗?有没有办法在 Azure DevOps 中发布的 wheel 版本号中包含开发分支名称作为工件?
How can I include a branch name in a wheel version number for Azure DevOps artifacts?
恐怕没有这种方法可以在 Azure DevOps 工件的轮版本号中包含分支名称。
当我们将 python 包推送到 Azure DevOps 工件时,此包需要遵循规则 PEP 440,该规则描述了用于识别 Python 软件分发版本的方案,并且声明对特定版本的依赖。
Public version identifiers are separated into up to five segments:
- Epoch segment: N!
- Release segment: N(.N)*
- Pre-release segment: {a|b|rc}N
- Post-release segment: .postN
- Development release segment: .devN
这就是 Azure 管道只接受上面部分中标有“ok”的版本号的原因。
另一方面,PEP440 确实允许将任意 local version labels 附加到版本说明符,但这些必须附加 '+
',这是您尝试的第二种方法。但是,Azure Artifacts python 包目前不支持此版本格式。
有网友的声音:Local Version Segments for Python Package Feeds,大家可以关注下评论,查看本期反馈。我也会跟进这个问题,我会把这个工单的最新状态发给你。
希望对您有所帮助。
简介
我同意在 N
是整数的情况下使用 .devN
不是很方便。本地版本标识符在这里似乎很有趣,但它最初并不是为此而设计的。
由于 PEP440 的以下建议,它可能在 Azure 中不可用:
An "upstream project" is a project that defines its own public versions ... Local version identifiers SHOULD NOT be used when publishing upstream projects to a public index server ... As the Python Package Index is intended solely for indexing and hosting upstream projects, it MUST NOT allow the use of local version identifiers ...
解决方案 1
如果您考虑使用支持本地版本标识符的不同 python 包索引,请注意 +
。因为如果你把你的轮子发布到这个索引,这个版本可能被认为是可用的:
Comparison and ordering of local versions consider each segment of the local version (divided by a .) separately.
例如,如果您发布 1.2.3+${BRANCH_NAME}
、1.2.3+dev${BRANCH_NAME}
或 1.2.3+dev.${BRANCH_NAME}
,则可以通过简单的 pip install your_package
或 pip install your_package>=1.2.3
不自觉地安装此开发版本]
因此,对于开发版本,更喜欢以下语法:1.2.3.dev0+${BRANCH_NAME}
解决方案 2
您可以使用 COMMIT_SHA1
而不是 BRANCH_NAME
。然后,您可以将以 10 为基数的十六进制 COMMIT_SHA1
转换为整数,并使用 0.devN
语法。
我的目标是为 python 车轮版本提供正常版本号,如 1.0.0
,并为特定分支提供特定于分支的版本号,如 1.0.0.dev1+hg.5.b11e5e6f0b0b
.
不幸的是,Azure DevOps 拒绝大多数版本号无效,并显示以下两条错误消息之一:
HTTPError: 400 Client Error: Bad Request - The package version provided is invalid. Versions should conform to the format described in PEP 440 and be under 128 characters. (DevOps Activity ID: 0000000-AAAA-2222-3333-11111111111) for url: https://pkgs.dev.azure.com/sample/_packaging/sample_libraries/pypi/upload
for version numbers like:
version='1.0.0.1.dev', ok
version='1.0.0.1.dev1', ok
version='1.0.0.1.dev_2', ok
version='1.0.0.1.dev_2_b', FAIL
version='1.0.0.1.dev_2-3', FAIL
version='1.0.0.1.dev_2.3', FAIL
version='1.0.0.1.dev_2.3', FAIL
version='1.0.0.d1.dev', FAIL
version='1.0.0.d.dev', FAIL
version='1.0.0.1d1.dev', FAIL
version='1.0.0.1d1.dev1', FAIL
version='1.0.0.1.dev1-3', FAIL
version='1.0.0.1.dev1.3', FAIL
version='1.0.0.1.dev1.3', FAIL
version='1.0.0.1.1.3', ok
version='1.0.0.1.1-3.3', FAIL
400 Client Error: Bad Request - The package version provided is invalid. Local version segments are not allowed.
for version numbers like: 1.0.0+33
Azure 管道只接受上面部分中标有 "ok" 的版本号。
有什么办法解决这个问题吗?有没有办法在 Azure DevOps 中发布的 wheel 版本号中包含开发分支名称作为工件?
How can I include a branch name in a wheel version number for Azure DevOps artifacts?
恐怕没有这种方法可以在 Azure DevOps 工件的轮版本号中包含分支名称。
当我们将 python 包推送到 Azure DevOps 工件时,此包需要遵循规则 PEP 440,该规则描述了用于识别 Python 软件分发版本的方案,并且声明对特定版本的依赖。
Public version identifiers are separated into up to five segments:
- Epoch segment: N!
- Release segment: N(.N)*
- Pre-release segment: {a|b|rc}N
- Post-release segment: .postN
- Development release segment: .devN
这就是 Azure 管道只接受上面部分中标有“ok”的版本号的原因。
另一方面,PEP440 确实允许将任意 local version labels 附加到版本说明符,但这些必须附加 '+
',这是您尝试的第二种方法。但是,Azure Artifacts python 包目前不支持此版本格式。
有网友的声音:Local Version Segments for Python Package Feeds,大家可以关注下评论,查看本期反馈。我也会跟进这个问题,我会把这个工单的最新状态发给你。
希望对您有所帮助。
简介
我同意在 N
是整数的情况下使用 .devN
不是很方便。本地版本标识符在这里似乎很有趣,但它最初并不是为此而设计的。
由于 PEP440 的以下建议,它可能在 Azure 中不可用:
An "upstream project" is a project that defines its own public versions ... Local version identifiers SHOULD NOT be used when publishing upstream projects to a public index server ... As the Python Package Index is intended solely for indexing and hosting upstream projects, it MUST NOT allow the use of local version identifiers ...
解决方案 1
如果您考虑使用支持本地版本标识符的不同 python 包索引,请注意 +
。因为如果你把你的轮子发布到这个索引,这个版本可能被认为是可用的:
Comparison and ordering of local versions consider each segment of the local version (divided by a .) separately.
例如,如果您发布 1.2.3+${BRANCH_NAME}
、1.2.3+dev${BRANCH_NAME}
或 1.2.3+dev.${BRANCH_NAME}
,则可以通过简单的 pip install your_package
或 pip install your_package>=1.2.3
不自觉地安装此开发版本]
因此,对于开发版本,更喜欢以下语法:1.2.3.dev0+${BRANCH_NAME}
解决方案 2
您可以使用 COMMIT_SHA1
而不是 BRANCH_NAME
。然后,您可以将以 10 为基数的十六进制 COMMIT_SHA1
转换为整数,并使用 0.devN
语法。