【问题标题】:How can I include a branch name in a wheel version number for Azure DevOps artifacts?如何在 Azure DevOps 工件的轮版本号中包含分支名称?
【发布时间】:2020-03-02 01:07:25
【问题描述】:

我的目标是为 Python Wheel 发布提供正常版本号,例如 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 中作为工件发布的轮子的版本号中包含开发分支名称?

【问题讨论】:

    标签: python azure-devops python-wheel artifact


    【解决方案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,您可以关注您的 cmets 并查看此问题的反馈。我也会跟进这个问题,我会把这张票的最新状态发给你。

    希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      简介

      我同意使用.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 不由自主地安装

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

      解决方案 2

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-04-25
        • 1970-01-01
        • 2021-10-29
        • 1970-01-01
        • 2021-07-25
        • 2019-11-28
        • 1970-01-01
        • 2020-04-12
        相关资源
        最近更新 更多