python google的protorpc坏了(元类错误)

km0tfn4u  于 2023-06-20  发布在  Python
关注(0)|答案(2)|浏览(124)

我正在尝试学习grpc的基础知识,但是使用this appengine doc的示例会导致如下所示的错误。我在Mac上使用Python 2.7.11,在一个全新的虚拟环境中。
当使用最新版本的protorpcsix时,我得到一个错误,当根据网络上其他人的建议将six降级到1.10.0版本时,我得到一个不同的错误。这两个错误如下所示。

hello.py文件内容(直接从doc复制)

from protorpc import messages
from protorpc import remote
from protorpc.wsgi import service

package = 'hello'

class HelloRequest(messages.Message):
    my_name = messages.StringField(1, required=True)

class HelloResponse(messages.Message):
    hello = messages.StringField(1, required=True)

class HelloService(remote.Service):

    @remote.method(HelloRequest, HelloResponse)
    def hello(self, request):
        return HelloResponse(hello='Hello there, %s!' % request.my_name)

# Map the RPC service and path (/hello)
app = service.service_mappings([('/hello.*', HelloService)])

运行最新的pip模块(版本如下):

$ pip freeze
protorpc==0.11.1
six==1.11.0

$ python hello.py
Traceback (most recent call last):
  File "hello.py", line 1, in <module>
    from protorpc import messages
  File "/tmp/grpc/lib/python2.7/site-packages/protorpc/messages.py", line 1146, in <module>
    class Field(six.with_metaclass(_FieldMeta, object)):
TypeError: Error when calling the metaclass bases
    metaclass conflict: the metaclass of a derived class must be a (non-strict) subclass of the metaclasses of all its bases

使用降级的six模块运行(版本如下所示):

$ pip freeze
protorpc==0.11.1
six==1.10.0

$ python hello.py
Traceback (most recent call last):
  File "hello.py", line 2, in <module>
    from protorpc import remote
  File "/tmp/grpc/lib/python2.7/site-packages/protorpc/remote.py", line 117, in <module>
    from . import protobuf
  File "/tmp/grpc/lib/python2.7/site-packages/protorpc/protobuf.py", line 41, in <module>
    from .google_imports import ProtocolBuffer
ImportError: cannot import name ProtocolBuffer

是否有一个神奇的版本组合将使这个例子的工作,或者如果有可能我下面的文档是过时的和错误的?
提前感谢您的任何建议。

ds97pgxw

ds97pgxw1#

这的确是坏了;修复是在和我刚刚发布了0.12.0与修复。

fquxozlt

fquxozlt2#

在我的古代系统上,我在尝试做一次有限而无用的升级后也遇到了同样的情况。阅读你的问题后,我明白了要检查什么,并找到了神奇的组合:

protorpc-0.10.0-py2.7.egg
six-1.9.0-py2.7.egg

是的,甚至更好的组合会在真正的升级中出现。非常感谢您的问题和答案。

相关问题