繁体   English   中英

在 Google Cloud Build 中使用 python 插件编译 protobuf 消息

[英]Compiling protobuf messages using python plugin within Google Cloud Build

我已经处理这个问题几个星期了,我急需帮助。 因此,提前感谢您对如何将 protobufs 编译成 pb2.py 文件的任何见解,以便在 Google Cloud Build 期间您的工作区的 rest 可以访问它们。

到目前为止的尝试:

  1. 我首先尝试使用 google-cloud-builders, protoc image 我能够成功地将图像推送到构建器项目注册表,但我不确定我是否能够正确安装 python 插件。

    这是我的 cloud_build.yaml 步骤:

     - name: gcr.io/eco-env-238021/protoc args: - --proto-path=./protos - --python_out=./protos -./protos/A.proto

    我一直收到错误阅读: failed: starting step container failed: Error response from daemon: OCI runtime create failed: container_linux.go:380: starting container process caused: exec: "protoc": executable file not found in $PATH: unknown

  2. 接下来,我尝试使用可安装的 grpcio-tools python package pip 来编译原型。 这要成功得多,因为我实际上能够生成 pb2.py文件。 不过,我的兴奋是短暂的。 在云构建期间,我调用了一个导入 pb2.py 文件之一的测试文件,我们将其称为 A。现在,当 A 导入另一个 pb2.py 文件时,我遇到了一个模块未找到错误,我'我将称为 B。我已经打印出云构建环境中的目录结构,并且 A 和 B 都存在,并且 A 绝对可以访问 B(它们存在于同一个包中)。

这是目录结构:

 C:.
  |   cloudbuild.yaml
  |   __init__.py
  |       
  +---protos
  |       A_pb2.py
  |       B_pb2.py
  |       __init__.py
  |       
  +---tests
  |       test.py
Here is my cloud_build.yaml step:
    - name: python:3.7
      args: ["python", "-m", "grpc_tools.protoc",  "-I", "./protos",
             "--python_out=./protos", "./protots/A.proto"]
    - name: python:3.7
      args: ["python", "-m", "grpc_tools.protoc",  "-I", "./protos",
             "--python_out=./protos", "./protots/B.proto"]

    - name: python:3.7
      args: ["python","-m","unittest","discover","--verbose","-s","./tests/",
            "-p","test.py"]
      id: unittest

模块导入错误可能与 protobuf 文件的编译完全无关,而只是云构建环境的一个属性。 不过我确实注意到,如果我在触发云构建的存储库中预编译 protobuf 文件,一切都会正常工作。 或者,如果我在我的 PC 上执行相同的过程,一切都会正常进行。 我只是不明白文件如何存在但不可导入。

更新:我通过使我的 protobufs 目录(即本例中的 protos)成为 pip 可安装 package 来解决这个问题,因为 pip 安装似乎正确地将包添加到云构建环境中的 PATH。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM