【问题标题】:Latest Google protobuf not working on app engine最新的 Google protobuf 不适用于应用引擎
【发布时间】:2022-10-20 10:21:24
【问题描述】:

对于我的 GAE 应用程序,我正在更新 requirements.txt 中的库,然后,我收到与 protobuf 相关的错误消息。

TypeError:不能直接创建描述符。如果这个电话 来自 _pb2.py 文件,您生成的代码已过时,必须 使用 protoc >= 3.19.0 重新生成。如果您不能立即 重新生成您的原型,其他一些可能的解决方法是:

  1. 将 protobuf 包降级到 3.20.x 或更低版本。
  2. 设置 PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python(但这将使用纯 Python 解析并且会慢得多)。更多信息: https://developers.google.com/protocol-buffers/docs/news/2022-05-06#python-updates

    我没有直接使用 protobuf,所以其他 Google 库似乎正在使用它。添加

    protobuf==3.20.3

    根据我的要求。文本修复它。

    但是......发生了什么事,我需要做多长时间?我没有从 Google 在线找到任何有用的信息。

    必须将库固定到旧版本是很麻烦的,因为在某些时候会出现问题。

【问题讨论】:

    标签: python google-app-engine protocol-buffers protobuf-python


    【解决方案1】:

    目前,协议缓冲区版本4.21.0 在使用时包含一些重大更改。由于您提到您间接使用 protobuf,因此 Python 仍在调用最新更新。您可以在Protocol Buffers for Python Updates 上查看此链接。

    作为一种解决方法,正如错误消息所建议的那样,您可以安装 protobuf 版本 3.20.x 或更低版本,或者在您的 requirements.txt 文件中设置 protobuf==3.20.x 以覆盖最新版本。

    在 Google 为我们提供修复之前,我们没有时间框架来说明我们需要多长时间执行此解决方法。

    我也建议file a bug,因为这绝对是一个需要解决的主要问题。

    更新:

    以前在github 中为版本4.21.0 提交了一个错误,建议现在应该使用版本3.19.x3.20.x,并且已经提出了添加向后兼容层的功能请求。

    【讨论】:

      【解决方案2】:

      到底是怎么回事?

      Protobuf 计划了一个重大更改,并发布了它,更新了主要修订号。

      发生这种情况时,protobuf 的用户应该已经使用最新版本重新生成。但谷歌并没有用最新版本重新生成他们的库。

      我需要多长时间将 protobuf 固定到旧版本?

      直到谷歌修复他们的代码。向使用 protobuf 并为您导致此错误的 Google 库提交错误报告。

      必须将库固定到旧版本是很麻烦的,因为在某些时候会出现问题。

      使用过时的库是一个安全问题,因为它们没有最新的安全补丁。

      但是,除此之外,使用固定版本在本质上没有什么比始终使用最新版本更不稳定的了。事实上,(除了少数例外)通常情况正好相反;它更稳定。固定依赖项会导致确定性的可重复部署,并确保每个开发人员都在相同的代码库上进行测试。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-12-13
        • 1970-01-01
        • 2020-01-09
        • 1970-01-01
        • 1970-01-01
        • 2018-03-17
        • 2014-03-01
        • 1970-01-01
        相关资源
        最近更新 更多