7

protobufクラスから生成されたPythonコードを使用すると、次のエラーが発生します。

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です。最新バージョンを使用しているため、不足しているファイルはないと思います。

誰かが解決策が何であるか知っていますか?

4

5 に答える 5

9

私はあなたがあなた自身で生成descriptor_pb2.pyしなければならないと信じていprotocます:

protoc descriptor.proto --python_out=gen/

gen/生成されたPythonクラスを含むフォルダーです。

その後、以下は問題なく機能します。

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

../gen/descriptor_pb2.py存在する必要があります。

于 2009-12-01T19:59:07.950 に答える
5

私の場合、protobufが正しくインストールされていなかったため、descriptor_pb2が見つかりませんでした。protobufのpythonサブディレクトリで、必ず実行してください

python setup.py build
python setup.py test
python setup.py install (as root)
于 2013-12-05T15:29:28.587 に答える
2

readmeファイルの指示に従って、必ずprotobufランタイムライブラリをインストールしてください。インストールプロセスの一部としてdescriptor_pb2.pyをprotoc(protobufコンパイラ)によって生成する必要があるため、パッケージから直接ソースを使用することはできません。

于 2009-12-01T21:36:48.697 に答える
1

私はWindows10でPython2.7を使用しています。

私の場合、https://github.com/google/protobuf/releasesからprotoc-3.0.0-beta-2-win32をダウンロードし、バイナリprotocファイルをsrcフォルダーにコピーしました。

その後、コマンドpython setup.py buildを実行し、descriptor_pb2が生成されました。

于 2016-04-07T14:11:47.980 に答える
0

pythonsetup.pyビルド

一部のソースファイルが生成されるため、この手順は必須です。

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を生成しています/unittest_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 / internal/internalを生成しています... google / protobuf / internal/descriptor_pool_test2_pb2.pyを生成しています...google/ protobuf / internal/test_bad_identifiers_pb2.pyを生成しています...google/ protobuf / internal/missing_enum_values_pb2.pyを生成しています...google/ protobuf / internal / .py ... google / protobuf / internal/more_extensions_dynamic_pb2を生成しています。py ... google / protobuf / internal /more_messages_pb2.pyを生成しています...google/ protobuf / internal/factory_test1_pb2.pyを生成しています...google/ protobuf / internal/factory_test2_pb2.pyを生成しています...google/ protobuf /pyext/を生成していますpython_pb2.py ...bla..。

正確には「descriptor_pb2.py」

于 2015-08-07T17:14:56.040 に答える