Tom*_*Tom 6 python setuptools grpc grpc-python
我们在一个 repo 中有一些 gRPC 的 proto 文件,我读到提交生成的代码并不好。所以我想我需要将生成作为包安装的一部分(例如 setuptools、setup.py)
但是,要生成 gRPC 代码,您需要先pip install grpcio-tools根据docs运行安装包。但是 setup.py 的目的是自动下拉依赖,比如grpcio-tools。
那么是否有这样做的最佳实践?如在,如何从 setuptools 中生成依赖于另一个 python 包的代码?我最好创建一个单独的build.sh脚本来手动 pip-installs 并生成代码吗?或者我应该期望软件包的用户已经安装了grpcio-tools吗?
据我所知,“当前”的最佳实践是:
执行“pip install”。几乎相当于执行“pip install -r requirements.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'
])
Run Code Online (Sandbox Code Playgroud)
调用自定义 build_py 命令,如下所示:
class BuildPyCommand (build_py):
def run(self):
self.run_command('grpc')
super(BuildPyCommand, self).run()
Run Code Online (Sandbox Code Playgroud)
注意导入内部的run方法。在安装需求之前和之后,pip 似乎多次运行 setup.py。因此,如果您在文件顶部进行导入,则构建将失败。