проблема компиляции в protobuf с nanopb

Я использую библиотеку nanopb

Прошу вашего предложения по решению проблемы сборки - я использую protobuf 3.12, nanopb 0.4.2, puython3, gcc. Я скомпилировал протокол как c, так и python, но все еще столкнулся с проблемой при сборке.

make 
protoc -osimple.pb simple.proto   - step done 
nanopb/examples/simple $ python ../../generator/nanopb_generator.py simple.pb -> following error
$ python3 ../../generator/nanopb_generator.py simple.pb Traceback (most recent call last): File "../../generator/nanopb_generator.py", line 50, in from .proto import nanopb_pb2 SystemError: Parent module '' not loaded, cannot perform relative import

During handling of the above exception, another exception occurred:

Traceback (most recent call last): File "../../generator/nanopb_generator.py", line 71, in import proto.nanopb_pb2 as nanopb_pb2 File "/home/vagrant/nanopb-0.4.2-linux-x86/generator/proto/nanopb_pb2.py", line 10, in from google.protobuf import symbol_database as _symbol_database ImportError: cannot import name 'symbol_database'

Скажите, пожалуйста, что мне не хватает. Могу ли я использовать только Python2?
Какие функции protobuf не рекомендуется использовать в nanopb? Поддерживает ли nanopb синтаксис как proto2, так и proto3?


person Dhiman    schedule 24.08.2020    source источник


Ответы (1)


generator / proto / nanopb_pb2.py, строка 10, из google.protobuf импортировать базу данных символов как _symbol_database ImportError: невозможно импортировать имя 'symbol_database'

Похоже, существует конфликт версий между protoc версией и вашей python-protobuf версией. Попробуйте удалить nanopb_pb2.py, он должен снова сгенерироваться автоматически, возможно, если повезет больше.

Учитывая, что вы используете двоичный пакет, вы также можете вызвать generator_bin/nanopb_generator, в который уже должны быть включены все зависимости.

person jpa    schedule 24.08.2020
comment
Это сработало, удалив nanopb_pb2.py! Благодарю. Я видел в списке проблем, что nanopb 0.4.2 по умолчанию использует python3. Также я видел, что proto3 поддерживается. Есть идеи, каких функций proto3 следует избегать в nanopb? - person Dhiman; 24.08.2020
comment
@Dhiman Я не знаю причины избегать какой-либо конкретной функции. Некоторые функции (такие как Any тип сообщения и глубоко вложенные сообщения) могут добавить сложности, но это относится ко всем библиотекам protobuf. - person jpa; 24.08.2020
comment
Спасибо за помощь. Возможно, мне не хватает чего-то большего. В Linux make собирает файлы pb.c и pb.h. Однако, когда я запускаю python3 ../../generator/nanopb_generator.py simple.pb или ../../generator-bin/nanopb_generator simple.pb, он выдает ошибку. Необходимо проверить nanopb.mk в дополнительной папке, которая работает в make .. - person Dhiman; 28.08.2020