【发布时间】:2021-03-01 20:44:38
【问题描述】:
是否存在包含多个文件的 Python 数据流 Flex 模板示例,其中脚本正在导入同一文件夹中包含的其他文件?
我的项目结构是这样的:
├── pipeline
│ ├── __init__.py
│ ├── main.py
│ ├── setup.py
│ ├── custom.py
我正在尝试在 main.py 中导入 custom.py 以获得数据流 flex 模板。
我在管道执行中收到以下错误:
"ModuleNotFoundError: No module named 'custom'"
如果我将所有代码包含在一个文件中并且不进行任何导入,则管道可以正常工作。
示例 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"
Python 规范文件:
{
"pyFile":"/dataflow/template/pipeline/main.py"
}
我正在使用以下命令部署模板:
gcloud builds submit --project=${PROJECT} --tag ${TARGET_GCR_IMAGE} .
感谢任何帮助。
【问题讨论】:
-
您是否尝试将 ${WORKDIR} 附加到 PYTHONPATH 环境变量?您可以尝试将
ENV PYTHONPATH="${WORKDIR}:${PYTHONPATH}"添加到您的 dockerfile。 -
是的。我尝试附加到 PYTHONPATH。好像没用
-
@AkshayApte 你有 setup.py 作为 custom.py 的同一级别吗?对我来说,
find_packages找不到 custom.py,似乎 setup.py 必须是上面的一个目录 - stackoverflow.com/questions/28573040/… 很好奇你是如何让它工作的。
标签: python google-cloud-platform google-cloud-dataflow apache-beam