我的目标是为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中发布的轮子的版本号中包含开发分支名称作为工件?
答案 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_package
或 pip install your_package>=1.2.3
< /p>
因此,对于开发版本,更喜欢以下语法:1.2.3.dev0+${BRANCH_NAME}
解决方案 2
您可以使用 COMMIT_SHA1
代替 BRANCH_NAME
。然后,您可以将十六进制 COMMIT_SHA1
以 10 为基数转换为整数并将其与 0.devN
语法一起使用。