如何在Azure DevOps工件的轮子版本号中包含分支名称?

时间:2020-03-02 01:07:25

标签: python azure-devops python-wheel artifact

我的目标是为python wheel发行版提供正常的版本号,例如for i, j in df.iterrows(): if len(df['B'][i] ==len(df['B'][j] & collections.Counter(df['B'][i]==collections.Counter(df['B'][j]) df['C'][j]==df['C'][i] else: df['C'][j]==df['C'][j] ,为特定分支提供特定于分支的特定版本号,例如1.0.0

不幸的是,Azure DevOps拒绝大多数版本号为无效,并显示以下两个错误消息之一:

1.0.0.dev1+hg.5.b11e5e6f0b0b
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

Azure管道仅接受以上段中标记为“ ok”的版本号。

有什么办法解决吗?是否可以在Azure DevOps中发布的轮子的版本号中包含开发分支名称作为工件?

2 个答案:

答案 0 :(得分:1)

如何在Azure DevOps工件的转盘版本号中包含分支名称?

恐怕没有这样的方法可以在Azure DevOps工件的转盘版本号中包含分支名称。

当我们将python程序包推送到Azure DevOps工件时,此程序包需要遵循规则PEP 440,该规则描述了一种用于识别Python软件发行版的版本以及声明对特定版本的依赖性的方案。

公共版本标识符最多分为五个部分:

  • 史诗段:N!
  • 发布细分:N(.N)*
  • 预发布细分:{a | b | rc} N
  • 发布后段:.postN
  • 开发发行版:.devN

Azure管道仅接受以上段中标记为“ ok”的版本号的原因。

另一方面,PEP440确实允许将任意local version labels附加到版本说明符,但是必须在它们后面附加'+',这是您尝试的第二种方法。但是,Azure Artifacts python软件包目前不支持此版本格式。

有一个关于它的用户声音:Local Version Segments for Python Package Feeds,您可以关注您的评论,并查看此问题的反馈。我还将跟踪该问题,并将此票证的最新状态发送给您。

希望这会有所帮助。

答案 1 :(得分:0)

简介

我同意使用 .devN 其中 N 是一个整数不是很方便。本地版本标识符在这里似乎很有趣,但它最初并不是为此而设计的。

由于 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_packagepip install your_package>=1.2.3< /p>

因此,对于开发版本,更喜欢以下语法:1.2.3.dev0+${BRANCH_NAME}

解决方案 2

您可以使用 COMMIT_SHA1 代替 BRANCH_NAME。然后,您可以将十六进制 COMMIT_SHA1 以 10 为基数转换为整数并将其与 0.devN 语法一起使用。