لماذا أرى "لا يمكنني استيراد اسم descriptor_pb2" عند استخدام المخازن المؤقتة بروتوكول Google؟

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

  •  11-09-2019
  •  | 
  •  

سؤال

عند استخدام رمز Python الذي تم إنشاؤه من فئات Protobuf الخاصة بنا، نحصل على هذا الخطأ:

cannot import name descriptor_pb2

يعمل رمز C ++ المكافئ على ما يرام، لذلك سيظهر أنه لا توجد مشكلة في تعريفات بروتوكلة الفعلي لدينا.

يحدث هذا الخطأ عندما أحاول استيراد صفنا، مثل ذلك:

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

from foobar_pb2 import FooBar

هل صحيح لإلحاق مسارات النظام؟

راجعت في protobuf\python\google\protobuf دليل ل descriptor_pb2.py ولكن وجدت فقط descriptor.py - نحن نستخدم أحدث إصدار، لذلك أفترض أننا ليس لدينا أي ملفات مفقودة.

لا أحد يعرف ما هو الحل؟

هل كانت مفيدة؟

المحلول

أعتقد أنك يجب أن تولد descriptor_pb2.py مع protoc نفسك:

protoc descriptor.proto --python_out=gen/

gen/ هو مجلد مع فصول بيثون التي تم إنشاؤها.

بعد ذلك، يعمل ما يلي على ما يرام:

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

../gen/descriptor_pb2.py يجب أن موجود.

نصائح أخرى

في حالتي، لم يتم حدوث العثور على Descriptor_PB2 لأن Protobuf لم يتم تثبيته بشكل صحيح. في الدليل الفرعي Python Protobuf، تأكد من تشغيل

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

يرجى التأكد من تثبيت مكتبة تشغيل Protobuf وفقا لتوجيهات ملف ReadMe. لا يمكنك ببساطة استخدام المصدر مباشرة من الحزمة، نظرا لأن Descrimcriptor_PB2.py يجب أن يتم إنشاؤها بواسطة PROTOC (مترجم Protobuf) كجزء من عملية التثبيت.

يمكنني استخدام Python 2.7 على Windows 10.

في حالتي، قمت بتنزيل PROTOC-3.0.0-Beta-2-Win32 من https://github.com/google/protobuf/releases. ونسخ ملف البروتوك الثنائي إلى مجلد SRC.

بعد ذلك قمت بتشغيل الأمر Python Setup.py Build. وتم إنشاء descriptor_pb2.

Python Setup.py Build.

هذه الخطوة إلزامية لأنها ولدت بعض الملفات المصدر.

توليد Google / Protobuf / descriptor_pb2.py ... توليد Google / Protobuf / Compiler / Plugin_pb2.py ... توليد Google / Protobuf / Unittest_pb2.py ... توليد Google / Protobuf / Unittest_custom_options_pb2.py ... توليد Google / Protobuf /Nittest_import_pb2.py ... توليد Google / Protobuf / Unittest_import_public_pb2.py ... توليد Google / Protobuf / Unittest_mset_pb2.py ... توليد Google / Protobuf / Unittest_no_generic_services_pb2.py ... توليد Google / Protobuf / Descriptor_pool_test1_pb2.pain . .py ... توليد Google / Protobuf / Internal / more_extensions_dynamic_pb2.py ... توليد Google / Protobuf / Internal / More_messages_pb2.py ... توليد Google / Protobuf / Internal_test1_pb2.py ... توليد Google / Protobuf / Internal / بحكم الواقع ry_test2_pb2.py ... توليد جوجل / protobuf / pyext / python_pb2.ps ... bla ...

بالتحديد "descriptor_pb2.py"

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top