在 Dataflow Python flex 模板中包含另一个文件 ImportError

Aks*_*pte 6 python google-cloud-platform google-cloud-dataflow apache-beam

是否有包含多个文件的 Python 数据流 Flex 模板示例,其中脚本正在导入同一文件夹中包含的其他文件?

我的项目结构是这样的:

??? pipeline
?   ??? __init__.py
?   ??? main.py
?   ??? setup.py
?   ??? custom.py
Run Code Online (Sandbox Code Playgroud)

我正在尝试在 main.py 中导入 custom.py 以获取数据流 flex 模板。

我在管道执行中收到以下错误:

"ModuleNotFoundError: No module named 'custom'"
Run Code Online (Sandbox Code Playgroud)

如果我将所有代码包含在一个文件中并且不进行任何导入,则管道工作正常。

示例 Dockerfile:

FROM gcr.io/dataflow-templates-base/python3-template-launcher-base

ARG WORKDIR=/dataflow/template/pipeline
RUN mkdir -p ${WORKDIR}
WORKDIR ${WORKDIR}

COPY pipeline /dataflow/template/pipeline

COPY spec/python_command_spec.json /dataflow/template/

ENV DATAFLOW_PYTHON_COMMAND_SPEC /dataflow/template/python_command_spec.json

RUN pip install avro-python3 pyarrow==0.11.1 apache-beam[gcp]==2.24.0

ENV FLEX_TEMPLATE_PYTHON_SETUP_FILE="${WORKDIR}/setup.py"
ENV FLEX_TEMPLATE_PYTHON_PY_FILE="${WORKDIR}/main.py"
Run Code Online (Sandbox Code Playgroud)

Python规范文件:

{
    "pyFile":"/dataflow/template/pipeline/main.py"
}
  
Run Code Online (Sandbox Code Playgroud)

我正在使用以下命令部署模板: gcloud builds submit --project=${PROJECT} --tag ${TARGET_GCR_IMAGE} .

任何帮助表示赞赏。

Aks*_*pte 4

我实际上通过向模板执行传递一个附加参数 setup_file 来解决这个问题。还需要setup_file在模板元数据中添加参数

--parameters setup_file="/dataflow/template/pipeline/setup.py"
Run Code Online (Sandbox Code Playgroud)

显然 Dockerfile 中的命令ENV FLEX_TEMPLATE_PYTHON_SETUP_FILE="${WORKDIR}/setup.py" 是无用的,并且实际上并没有获取安装文件。

我的安装文件如下所示:

import setuptools

setuptools.setup(
    packages=setuptools.find_packages(),
    install_requires=[
        'apache-beam[gcp]==2.24.0'
    ],
 )
Run Code Online (Sandbox Code Playgroud)