Pourquoi est-ce que je vois « ne peut pas importer le nom descriptor_pb2 » erreur lorsque vous utilisez Google Protocol Buffers?

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

  •  11-09-2019
  •  | 
  •  

Question

Lorsque vous utilisez le code Python généré par nos cours de protobuf, nous obtenons cette erreur:

cannot import name descriptor_pb2

L'équivalent code généré C ++ fonctionne très bien, il semble qu'il n'y a pas de problème avec nos définitions proto réels.

Cette erreur se produit lorsque je tente et importer notre classe, comme suit:

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

from foobar_pb2 import FooBar

Est-il exact ajouter les chemins du système?

J'ai vérifié dans le répertoire protobuf\python\google\protobuf pour descriptor_pb2.py mais seulement trouvé descriptor.py -. Nous utilisons la dernière version, donc je suppose que nous n'avons pas les fichiers manquants

Quelqu'un sait-il ce que la solution est?

Était-ce utile?

La solution

Je crois que vous devez générer descriptor_pb2.py avec protoc vous:

protoc descriptor.proto --python_out=gen/

gen/ est un dossier avec des classes de python générés.

Après cela, les travaux suivants très bien:

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

doit de ../gen/descriptor_pb2.py existe.

Autres conseils

Dans mon cas, ne pas trouver descriptor_pb2 eu lieu parce que protobuf n'a pas été correctement installé. Dans le sous-répertoire python de protobuf, assurez-vous d'exécuter

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

faire S'il vous plaît Veillez à installer la bibliothèque d'exécution protobuf comme indiqué dans le fichier Lisez-moi. Vous ne pouvez pas utiliser simplement la source directement du paquet, car descriptor_pb2.py doit être générée par protoc (le compilateur protobuf) dans le cadre du processus d'installation.

J'utilise Python 2.7 sur Windows 10.

Dans mon cas, je l'ai téléchargé protoc-3.0.0-beta-2-win32 de https: / /github.com/google/protobuf/releases et copier le fichier binaire protoc dans le dossier src.

après que j'exécutez la commande python build setup.py et le descriptor_pb2 a été généré.

python setup.py build

Cette étape est obligatoire car il a généré certains des fichiers source.

  

Génération google / protobuf / descriptor_pb2.py ... Génération   google / protobuf / compilateur / plugin_pb2.py ... Génération   google / protobuf / unittest_pb2.py ... Génération   google / protobuf / unittest_custom_options_pb2.py ... Génération   google / protobuf / unittest_import_pb2.py ... Génération   google / protobuf / unittest_import_public_pb2.py ... Génération   google / protobuf / unittest_mset_pb2.py ... Génération   google / protobuf / unittest_no_generic_services_pb2.py ... Génération   google / protobuf / interne / descriptor_pool_test1_pb2.py ... Génération   google / protobuf / interne / descriptor_pool_test2_pb2.py ... Génération   google / protobuf / interne / test_bad_identifiers_pb2.py ... Génération   google / protobuf / interne / missing_enum_values_pb2.py ... Génération   google / protobuf / interne / more_extensions_pb2.py ... Génération   google / protobuf / interne / more_extensions_dynamic_pb2.py ... Génération   google / protobuf / interne / more_messages_pb2.py ... Génération   google / protobuf / interne / factory_test1_pb2.py ... Génération   google / protobuf / interne / factory_test2_pb2.py ... Génération   google / protobuf / pyext / python_pb2.py ... Bla ...

Précisément le 'descriptor_pb2.py'

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top