GCP Dataflow Python流水线ModuleNotFoundError问题求助
解决GCP Dataflow Python流水线找不到unidecode模块的问题
先确认镜像参数是否正确传递
生成模板时必须同时指定--sdk_location=container和--worker_harness_container_image两个参数,缺一个都会导致Worker使用默认镜像。示例命令:
python your_pipeline.py \ --runner=DataflowRunner \ --project=your-project-id \ --region=your-region \ --staging_location=gs://your-bucket/staging \ --temp_location=gs://your-bucket/temp \ --template_location=gs://your-bucket/templates/your-template \ --sdk_location=container \ --worker_harness_container_image=us-central1-docker.pkg.dev/your-project-id/your-repo/your-image:tag
另外,本地拉取你推送到Artifact Registry的镜像,进入容器后执行pip list | grep unidecode,确认镜像内确实安装了该依赖——避免镜像本身未正确打包依赖导致白忙活。
检查模板与任务提交的一致性
通过UI创建任务时,不要修改镜像相关配置项,确保使用的是生成模板时指定的自定义镜像。如果UI中显示的是默认Beam SDK镜像,说明模板生成时参数未生效,删除旧模板重新生成即可。
若仍想使用requirements_file方式
- 确保requirements.txt文件仅包含一行
unidecode,无多余格式或内容。 - 生成模板时必须携带
--requirements_file=./requirements.txt参数,且文件路径与执行命令的当前目录对应。 - 注意:使用自定义镜像时,requirements_file的设置会被镜像内的依赖覆盖,此时无需再指定该参数。
查看Worker日志确认实际使用的镜像
进入Dataflow任务的日志页面,搜索container image关键词,确认Worker实际拉取的是你的自定义镜像还是默认镜像。如果是默认镜像,说明模板生成命令的参数传递有误,需重新检查修正。
镜像构建的注意事项
- 基础镜像必须与你使用的Beam版本匹配,比如使用Beam 2.50.0时,需基于
apache/beam-python3.9:2.50.0构建。 - Dockerfile中安装依赖的命令要正确,示例:
FROM apache/beam-python3.9:2.50.0 RUN pip install unidecode
- 推送镜像到Artifact Registry时,确保标签正确,避免拉取到旧版本镜像。
内容的提问来源于stack exchange,提问作者TKross
相关产品推荐
相关产品推荐

