Warum sehe ich Fehler „kann nicht Namen descriptor_pb2 importieren“, wenn Google Protocol Buffers mit?

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

  •  11-09-2019
  •  | 
  •  

Frage

Wenn das erzeugte Python-Code aus unseren protobuf Klassen, bekommen wir diesen Fehler:

cannot import name descriptor_pb2

Der äquivalente C ++ generierte Code funktioniert gut, so dass es scheint, dass es kein Problem mit unseren tatsächlichen Proto Definitionen ist.

Dieser Fehler tritt auf, wenn ich versuche, und unsere Klasse importieren, etwa so:

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

from foobar_pb2 import FooBar

Ist es richtig, die Systempfade anhängen?

checkte ich im protobuf\python\google\protobuf Verzeichnis für descriptor_pb2.py aber nur gefunden descriptor.py -. Wir verwenden die neueste Version, so dass ich davon ausgehen, wir haben noch keine Dateien fehlen

Wer weiß, was die Lösung ist?

War es hilfreich?

Lösung

Ich glaube, Sie descriptor_pb2.py mit protoc zu erzeugen, haben Sie sich:

protoc descriptor.proto --python_out=gen/

gen/ ist ein Ordner mit generierten Python-Klassen.

Danach werden die folgenden funktioniert gut:

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

../gen/descriptor_pb2.py muss vorhanden ist.

Andere Tipps

In meinem Fall nicht finden descriptor_pb2 aufgetreten, weil protobuf nicht korrekt installiert wurde. In der Python-Unterverzeichnis von protobuf, müssen Sie laufen

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

Bitte stellen Sie sicher, dass die protobuf Laufzeitbibliothek installieren, wie in der Readme-Datei gerichtet. Sie können nicht einfach die Quelle direkt aus dem Paket verwenden, da descriptor_pb2.py von Protoc erzeugt werden muss (der protobuf Compiler) als Teil des Installationsprozesses.

Ich verwende Python 2.7 auf Windows 10.

In meinem Fall ich habe Protoc-3.0.0-beta-2-win32 von https: / /github.com/google/protobuf/releases und kopiert die binäre Protoc-Datei src Ordner.

danach habe ich den Befehl ausgeführt haben python setup.py build und die descriptor_pb2 generiert wurde.

python setup.py build

Dieser Schritt ist zwingend notwendig, da es einige der Quelldateien erzeugt werden.

  

Die Erzeugung google / protobuf / descriptor_pb2.py ... Generieren   google / protobuf / Compiler / plugin_pb2.py ... Generieren   google / protobuf / unittest_pb2.py ... Generieren   google / protobuf / unittest_custom_options_pb2.py ... Generieren   google / protobuf / unittest_import_pb2.py ... Generieren   google / protobuf / unittest_import_public_pb2.py ... Generieren   google / protobuf / unittest_mset_pb2.py ... Generieren   google / protobuf / unittest_no_generic_services_pb2.py ... Generieren   google / protobuf / intern / descriptor_pool_test1_pb2.py ... Generieren   google / protobuf / intern / descriptor_pool_test2_pb2.py ... Generieren   google / protobuf / intern / test_bad_identifiers_pb2.py ... Generieren   google / protobuf / intern / missing_enum_values_pb2.py ... Generieren   google / protobuf / intern / more_extensions_pb2.py ... Generieren   google / protobuf / intern / more_extensions_dynamic_pb2.py ... Generieren   google / protobuf / intern / more_messages_pb2.py ... Generieren   google / protobuf / intern / factory_test1_pb2.py ... Generieren   google / protobuf / intern / factory_test2_pb2.py ... Generieren   google / protobuf / pyext / python_pb2.py ... bla ...

Gerade die 'descriptor_pb2.py'

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top