You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用setup.py在Dataflow运行Apache Beam任务出现ModuleNotFoundError

这个报错是因为Dataflow工作节点运行时无法识别你自定义的extract模块,通常是打包配置或提交参数有误导致的,可按以下步骤逐一排查修复:

  • 检查提交作业的启动参数是否正确
    你需要在Dataflow提交命令中显式指定setup.py路径,参数为--setup_file=./setup.py,示例提交命令参考:
    python main.py \
      --runner=DataflowRunner \
      --project=你的项目ID \
      --region=运行区域 \
      --setup_file=./setup.py \
      # 其余你的作业参数
    
    缺少该参数时Dataflow不会自动打包你的自定义模块分发到工作节点。
  • 修正setup.py配置增强兼容性
    部分场景下find_packages()的自动扫描逻辑会出现异常,你可以显式声明包路径和根目录,调整后的setup.py参考:
    from setuptools import setup, find_packages
    
    setup(
        name="g_dataflow",
        version="0.1.0",
        install_requires=[
            'google-cloud-storage==1.42.0'
        ],
        packages=find_packages(),
        # 新增下面这行指定包根目录
        package_dir={'': '.'}
    )
    
    调整后可先在本地验证包扫描是否正常:在root_dir目录下执行python -c "from setuptools import find_packages; print(find_packages())",确认输出包含extract即可。
  • 调整导入写法避免路径问题
    main.py中导入extract模块的代码请使用绝对导入写法,不要使用相对导入,示例:
    # 正确写法
    from extract.extract import 你需要的类/方法
    # 不要用类似 from .extract import xxx 的相对导入写法
    
  • 备选更稳定的打包方案
    如果上述调整还是报错,可以改用预打包的方式提交:
    1. 在root_dir下执行python setup.py sdist,执行完成后会在dist目录生成g_dataflow-0.1.0.tar.gz安装包
    2. 提交作业时把--setup_file参数替换为--extra_package=./dist/g_dataflow-0.1.0.tar.gz即可。
  • 最后确认提交作业的工作目录,必须在root_dir根目录下执行提交命令,不要在root_dir的上级或下级目录提交。

内容的提问来源于stack exchange,提问作者Idhem

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 23:36:01