[protocolbuffers/protobuf]protobuf 3.18 缺少 python_requires 元数据

2024-05-11 953 views
0

您使用什么版本的 protobuf 以及什么语言? 版本:3.18 语言:Python

什么操作系统(Linux、Windows...)和版本?

Linux

您使用什么运行时/编译器(例如,python 版本或 gcc 版本)

Python 2.7

你做了什么?

只是尝试 pip 安装一些依赖项中有 protobuf 的包。现在,由于语法错误,单元测试将无法运行。

你期望看到什么

没有错误。

你看到了什么?

E     File "/home/jenkins/workspace/.../.tox/6.6.0/py27/lib/python2.7/site-packages/google/protobuf/descriptor.py", line 113
E       class DescriptorBase(metaclass=DescriptorMetaclass):
E                                     ^
E   SyntaxError: invalid syntax

关于您的项目/环境我们还应该了解的其他信息


这个问题已经在 master 中修复了。这只是向后移植https://github.com/protocolbuffers/protobuf/commit/b75bb0955116b833dc68a1aae5c0cdf81a638af3#diff-eb8b42d9346d0a5d371facf21a8bfa2d16fb49e213ae7c21f03863accebe0fcf的请求3.18 版本似乎放弃了对 Python 2 的支持。在有人建议更新到 Python 之前3,是的,这是正在进行的工作(大公司,有很多遗产的项目,你明白了)。

回答

6

protobuf 3.18.0 是最后一个版本。假设这个问题在 master 中得到了修复,正如你所说,我猜测下一个版本将包含修复程序,所以我很困惑为什么你在这里要求向后移植。

0

@elharo - 我相信它需要向后移植,以便 3.18.0 停止(错误地)通过不包含python_requires.

也就是说:直到 3.18.0 具有明确的值python_requires- 它将继续为 2.7 上未版本锁定/限制为 的任何人安装<3.18.0

否则,当 pip 查看最新版本时,您正在谈论它在哪里“修复” - 它会说“哎呀,那个版本有一个不兼容的python_requires,那之前的版本怎么样 - 3.18.0?是的 - 不python_requires- 看起来不错,让我们安装那个”。哎呀...:)

9

那么您希望我们发布具有相同版本号的新二进制文件?如果是Java,我会说这是不可能的。在 Python 中我不确定,但在做之前我们肯定要非常非常仔细地研究一下。

1

也许我们应该在 PyPI 上删除 3.18.0 版本?这能解决问题吗?

1

这当然是我们在做之前需要非常非常仔细地考虑的事情。

@elharo你是对的。以新的眼光看待:我认为 @acozzette 提出的撤回 3.18.0 的建议可能正是我们想要的。

请参阅:https://www.python.org/dev/peps/pep-0592/

TL;DR:除非已固定,否则此版本将实际上变得可卸载。

7

好吧,我继续并删除了 3.18.0,所以希望这能解决问题。仍需要 Python 2 支持的用户可以继续使用 3.17.3。

5

抱歉没能及时收到通知。是的,我认为取消发布是正确的解决方案。如果您想保留 3.18,则发布仅添加此元数据更改的 3.18.0.post1 可能没问题,因为它应该由 pip 拉取,并且如果您不这样做,您可以在 3.18.0 标记之上进行一次提交现在不想从主人那里标记。非常感谢你的帮助。

8

pip install protobuf==3.17.3通常应该可以解决问题。