Cloudbuild с Python 2.7 и Apache Beam - PullRequest
0 голосов
/ 27 января 2020

Я создал конвейер с Apache Beam на Python 2.7, который работает в потоке данных Google. Этот конвейер работает хорошо, когда я развертываю его локально со своего ноутбука. Я сейчас wi sh для его развертывания через CloudBuild. Это мой файл cloudbuild.yaml:

steps:
  - name: "docker.io/library/python:2.7"
    args: ["pip", "install", "-t", "/workspace/lib", "-r", "requirements.txt"]
  - name: "docker.io/library/python:2.7"
    args: ["python2", "tests.py"]
    env: ["PYTHONPATH=/workspace/lib"]

Когда CloudBuild запускается, он успешно устанавливает все требования, но затем, когда он пытается импортировать apache_beam в файл tests.py, я получаю следующую ошибку :

   File "tests.py", line 3, in <module>
     import apache_beam as beam
   File "/workspace/lib/apache_beam/__init__.py", line 97, in <module>
     from apache_beam import coders
   File "/workspace/lib/apache_beam/coders/__init__.py", line 19, in <module>
     from apache_beam.coders.coders import *
   File "/workspace/lib/apache_beam/coders/coders.py", line 29, in <module>
     import google.protobuf.wrappers_pb2
 ImportError: No module named google.protobuf.wrappers_pb2

В файле require.txt у меня есть среди прочего следующее:

apache-beam==2.16.0
protobuf==3.11.0

Примечание. Все необходимые требования перечислены в файле needs.txt. , поскольку я могу развернуть конвейер локально.

1 Ответ

0 голосов
/ 28 января 2020

Мне удалось воспроизвести вашу проблему только с другим файлом с именем tests.py с одной строкой:

import apache_beam as beam

Кажется, что это известная проблема в некоторых сообществах.

Прежде всего, эта ошибка не возникает, если вместо устаревшего Python2 вместо Python3 .7 использовать. Полагаю, что требуется Python2 .7.

Я создал Dockerfile, например:

FROM python:2

WORKDIR /usr/src/app

COPY requirements.txt ./

RUN pip install --no-cache-dir -r requirements.txt

COPY . .

CMD [ "python", "./tests.py" ]

А затем изменил cloudbuild.yaml:

steps:
- name: 'gcr.io/cloud-builders/docker'
  args: [ 'build', '-t', 'gcr.io/$PROJECT_ID/quickstart-image', '.' ]

который строит успешно:

Step 5/6 : COPY . .
 ---> 082407f9672d
Step 6/6 : CMD [ "python", "./tests.py" ]
 ---> Running in 7d53e96370f9
Removing intermediate container 7d53e96370f9
 ---> d60a6d473d21
Successfully built d60a6d473d21
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...