Как используются пакеты protobuf? - PullRequest
0 голосов
/ 30 января 2019

Я не понимаю первую часть последнего предложения о пакетах из документации по google Python protobuf:

Файл .proto начинается с объявления пакета, что помогает предотвратить конфликты имен междуразные проекты.В Python пакеты обычно определяются структурой каталогов, поэтому пакет, который вы определяете в файле .proto, не будет влиять на сгенерированный код.Однако вы все равно должны объявить один , чтобы избежать конфликтов имен в пространстве имен буферов протокола , а также в языках, не являющихся Python.

На самом деле неверно, что " пакет, который вы определили в своем файле .proto, не будет влиять на сгенерированный код " в Python (и, вероятно, поэтому в языках, которые используютпространства имен), поскольку сгенерированные файлы ..._pb2.py содержат дескрипторы, которые имеют поле пакета.

DESCRIPTOR = _descriptor.FileDescriptor(
  name='example.proto',
  package='example',
  syntax='proto3',
   ...
)

Я проверил, и вы не можете import example в обычный файл Python после генерации кода.т.е. объявление package example; в вашем .proto файле и затем protoc его компиляция не делает ваш пакет доступным для импорта в файлах python в вашей среде (вы все равно должны использовать import ..._pb2 для доступа к классам).

Кто-нибудь может объяснить, как пакеты, объявленные в .proto файлах, используются как в Python, так и в C # в качестве примера языка, который явно использует пространства имен?

...