簡體   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