【问题标题】:PyPi refuses version valuePyPi 拒绝版本值
【发布时间】:2021-03-02 17:57:49
【问题描述】:

我正在尝试将包上传到 pypi 并收到错误:

“4.5.1-2021.2-0”是无效的版本值。错误:以仅包含 ASCII 数字和“.”、“_”和“-”的字母或数字开头和结尾。请参阅https://packaging.python.org/specifications/core-metadata 了解更多信息。

我知道我的名字不符合PEP440,但它符合 PyPi 值格式。奇怪,它将_ 替换为-

来自setup.py

setuptools.setup(
    name="opencv-python-inference-engine",
    version="4.5.1_2021.2_0",
...

包文件名:opencv_python_inference_engine-4.5.1_2021.2_0-py3-none-manylinux1_x86_64.whl

我做错了什么,除了 PRP440 合规性?

UPD:“4.5.1-2021.2”也会产生错误,但它看起来符合 PEP440(预发布分隔符)。

【问题讨论】:

  • 你写“我知道我的名字不是PEP440。”PyPi docs“这个字段必须是PEP 440中指定的格式” 你看到问题了吗? :)
  • @DeepSpace 好吧,它给出了不同文本的错误,但我明白你的意思:) 我试过'4.5.1-2021.2',它也会产生错误,但它看起来符合 PEP440(预释放分隔符)。

标签: python pip upload pypi


【解决方案1】:

您的版本不符合 PEP440。预发布版本必须包含预发布“阶段”(alpha、beta、候选发布)。

预发布段由预发布阶段的字母标识符和非负整数值组成。给定版本的预发布首先按阶段(alpha、beta、候选版本)排序,然后按该阶段中的数字组件排序。

X.YaN   # Alpha release
X.YbN   # Beta release
X.YrcN  # Release Candidate
X.Y     # Final release

对于 alpha,这意味着字母 a,对于 beta,这意味着字母 b,对于 Release Candidate,您需要 rc。将破折号更改为ab,我认为它会起作用。

【讨论】:

  • 嗯,我可以将major.minor.micro 和基于日期的版本合并到一个版本值中吗?
  • 我不确定我是否关注?有几种方法可以将基于日历的版本控制合并到 YY.MM.DD 中。
  • 是的,我可以合并 both 日历和 X.Y.Z 版本控制吗?例如,X.Y.Z-YY.MM.DD
  • 那我可以选择 X.Y.ZcYYMMDD。这样做的原因是 PEP440 允许“c”作为“rc”的别名,但在这种情况下,您可以告诉人们它实际上是日历。这样做的缺点是它确实限制了你每天发布一个版本,这在推出紧急修复时可能是一个问题。
  • @banderlog013 如果你想让dependency hell 对你的包的用户来说有点“地狱般的”,请坚持XYZ(删除日期部分)并关注semver
猜你喜欢
  • 2018-08-03
  • 2014-08-15
  • 1970-01-01
  • 2013-05-17
  • 2017-07-16
  • 2022-11-12
  • 2019-06-23
  • 2019-04-03
  • 2016-09-04
相关资源
最近更新 更多