Проблемы при компиляции кода 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
Я смог построить сообщения без каких-либо проблем!