Как сгенерировать код Python grpc из установщика setuptools (setup.py)? - PullRequest
0 голосов
/ 25 октября 2018

У нас есть несколько прототипов файлов для gRPC в репозитории, и я прочитал, что не следует фиксировать сгенерированный код.Поэтому я решил, что генерация должна быть частью установки пакета (например, setuptools, setup.py)

Однако для генерации кода gRPC сначала необходимо установить пакет, запустив pip install grpcio-tools в соответствии с документы .Но цель setup.py состоит в том, чтобы автоматически удалять зависимости типа grpcio-tools .

Так есть ли лучший метод для этого?Как создать код, который зависит от другого пакета Python из setuptools?Мне лучше просто создать отдельный build.sh скрипт, который вручную устанавливает pip и генерирует код?Или я должен ожидать, что пользователи пакета уже установят grpcio-tools ?

1 Ответ

0 голосов
/ 17 января 2019

Насколько мне известно, "текущая" лучшая практика:

  • pip управляет зависимостями
  • setup.py выполняет сборку

Выполнение"pip install."почти эквивалентно выполнению «pip install -r needs.txt» + «python setup.py build» + «python setup.py install».

Это пользовательская команда, которая генерирует исходные коды Python из прототипов:

class GrpcTool (Command):
    def initialize_options(self):
        pass

    def finalize_options(self):
        pass

    def run(self):
        import grpc_tools.protoc

        proto_include = pkg_resources.resource_filename('grpc_tools', '_proto')

        grpc_tools.protoc.main([
            'grpc_tools.protoc',
            '-I{}'.format(proto_include),
            '--python_out=SOME_PATH/',
            '--grpc_python_out=SOME_PATH/',
            'SOME_PROTO.proto'
        ])

, который вызывается для настройки команды build_py, например:

class BuildPyCommand (build_py):
    def run(self):
        self.run_command('grpc')
        super(BuildPyCommand, self).run()

Обратите внимание на импорт внутри метода run.Кажется, что pip запускает setup.py несколько раз, как до, так и после установки требований.Так что если у вас есть импорт поверх файла, сборка завершится неудачей.

...