¿Por qué veo “no puede importar descriptor_pb2 nombre de” error al utilizar Google Protocol Buffers?

StackOverflow https://stackoverflow.com/questions/1828379

  •  11-09-2019
  •  | 
  •  

Pregunta

Cuando se utiliza el código Python generado a partir de nuestras clases protobuf, se obtiene este error:

cannot import name descriptor_pb2

El equivalente de C ++ genera código funciona muy bien, por lo que parece que no hay ningún problema con nuestras definiciones actuales proto.

Este error se produce cuando intento e importar nuestra clase, así:

import sys
sys.path.append('..\path\to\generated')
sys.path.append('..\contrib\protobuf\python')

from foobar_pb2 import FooBar

¿Es correcto que se añadirán las rutas del sistema?

he comprobado en el directorio protobuf\python\google\protobuf para descriptor_pb2.py pero sólo encontré descriptor.py -. Estamos utilizando la versión más reciente, así que supongo que no tenemos archivos que faltan

¿Alguien sabe cuál es la solución?

¿Fue útil?

Solución

Creo que tiene para generar descriptor_pb2.py con protoc mismo:

protoc descriptor.proto --python_out=gen/

gen/ es una carpeta con las clases de Python generados.

Después de eso, los siguientes funciona bien:

sys.path.append('../gen')
from descriptor_pb2 import FileDescriptorSet

../gen/descriptor_pb2.py existe necesidad.

Otros consejos

En mi caso, se produjo al no encontrar descriptor_pb2 porque protobuf no se ha instalado correctamente. En el subdirectorio pitón de protobuf, asegúrese de ejecutar

python setup.py build
python setup.py test
python setup.py install (as root)

Por favor, asegúrese de instalar la biblioteca de ejecución protobuf como se indica en el archivo readme. Simplemente no se puede utilizar la fuente directamente fuera del paquete, ya que descriptor_pb2.py necesita ser generada por protoc (el compilador protobuf) como parte del proceso de instalación.

Yo uso Python 2.7 en Windows 10.

En mi caso, he descargado protoc-3.0.0-beta-2-Win32 desde https: / /github.com/google/protobuf/releases y copiar el archivo binario a protoc carpeta src.

después de que he ejecutar el comando python setup.py build se ha generado y la descriptor_pb2.

python setup.py build

Este paso es obligatorio, ya que genera algunos de los archivos de origen.

  

La generación de Google / protobuf / descriptor_pb2.py ... Generación   Google / protobuf / compilador / plugin_pb2.py ... Generación   Google / protobuf / unittest_pb2.py ... Generación   Google / protobuf / unittest_custom_options_pb2.py ... Generación   Google / protobuf / unittest_import_pb2.py ... Generación   Google / protobuf / unittest_import_public_pb2.py ... Generación   Google / protobuf / unittest_mset_pb2.py ... Generación   Google / protobuf / unittest_no_generic_services_pb2.py ... Generación   Google / protobuf / interno / descriptor_pool_test1_pb2.py ... Generación   Google / protobuf / interno / descriptor_pool_test2_pb2.py ... Generación   Google / protobuf / interno / test_bad_identifiers_pb2.py ... Generación   Google / protobuf / interno / missing_enum_values_pb2.py ... Generación   Google / protobuf / interno / more_extensions_pb2.py ... Generación   Google / protobuf / interno / more_extensions_dynamic_pb2.py ... Generación   Google / protobuf / interno / more_messages_pb2.py ... Generación   Google / protobuf / interno / factory_test1_pb2.py ... Generación   Google / protobuf / interno / factory_test2_pb2.py ... Generación   Google / protobuf / pyext / python_pb2.py ... bla ...

Precisamente el 'descriptor_pb2.py'

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top