Проблемы при компиляции кода Python grpc из протос

Я использую Python версии 2.7.6 и GRPCIO версии 1.12.0. У меня есть прото с определением сообщения, содержащего перечисление что-то вроде этого

enum Test {
    first 0;
    reserved 1;
    second 2;
}

Теперь, когда я пытаюсь скомпилировать с помощью команды

python -m grpc_tools.protoc -I./ --python_out=. --grpc_python_out=. mydata.proto

Я получаю сообщение об ошибке примерно так

Missing numeric value for enum constant

Это из-за версии на python и grpcio?

2 ответа

Ваше определение сообщения использует неверный синтаксис. Возможно, вы намереваетесь что-то вроде:

enum Test {
    first = 0;
    reserved 1;
    second = 2;
}

Обратите внимание на добавленные знаки равенства. Это перечисление определяет два значения, first а также secondи резервирует "1" для будущего использования.

Ссылка: https://developers.google.com/protocol-buffers/docs/proto3

Я напишу ответ здесь, потому что это был главный пост о переполнении стека, когда я получал ту же ошибку. Missing numeric value for enum constantкогда у меня было reservedполя в перечислении.

Я пытался скомпилировать заголовки для C++ и скачал protocкомпилятор , который был связан с учебником по буферам протокола . Запуск Ubuntu 18.04 и просто не смог заставить его распознавать зарезервированные поля.

В этой проблеме Github упоминалось, что мне нужна версия 3.6, но я только что скачал и сделал 3.20, и она все еще не работала.

Проблема для меня заключалась в том, что я не полностью следовал документации. В репозитории protobuf есть файл Readme, в котором , в частности, говорится:

Чтобы собрать и установить среду выполнения C++ Protocol Buffer и компилятор Protocol Buffer (protoc), выполните следующие действия:

       ./configure
make -j$(nproc) # $(nproc) ensures it uses all cores for compilation
make check
sudo make install
sudo ldconfig # refresh shared library cache.

я сделал ./configure, make, а также make checkшагов, но потом забыл sudo make installили же sudo ldconfig. Как только я это сделал, я получил правильную версию, когда запустил protoc --version.

У меня действительно была проблема, когда я сделал все это, получил правильную версию, а затем все еще были ошибки, но окно терминала, которое я использовал, было открыто до того, как я установил. Однажды я побежал source ~/.bashrcЯ смог построить сообщения без каких-либо проблем!

Другие вопросы по тегам