如何从 setuptools 安装程序 (setup.py) 中生成 python grpc 代码?

2023-11-22

我们在存储库中有一些 gRPC 的原型文件,我读到提交生成的代码并不好。所以我想我需要将生成作为软件包安装的一部分(例如 setuptools、setup.py)

但是,要生成 gRPC 代码,您需要首先通过运行来安装包pip install grpcio-tools根据the docs。但 setup.py 的目的是自动下拉依赖项,例如grpcio工具.

那么有这样做的最佳实践吗?例如,如何从 setuptools 中生成依赖于另一个 python 包的代码?我最好创建一个单独的build.sh手动 pip 安装并生成代码的脚本?或者我应该期望该包的用户已经拥有grpcio工具安装了?


据我所知,“当前”的最佳实践是:

  • pip 管理依赖关系
  • setup.py 执行构建

执行“pip install”。几乎相当于执行“pip install -rrequirements.txt”+“python setup.py build”+“python setup.py install”。

这是一个从 proto 文件生成 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()

注意导入inside运行方法。似乎 pip 在安装需求之前和之后多次运行 setup.py 。因此,如果您在文件顶部进行导入,则构建会失败。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 setuptools 安装程序 (setup.py) 中生成 python grpc 代码? 的相关文章

随机推荐