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

Google Cloud Composer中Airflow DAG无法访问依赖模块的问题排查

解决Cloud Composer中DAG无法访问同目录下Python模块的问题

我之前在Beta版的Cloud Composer里也碰到过一模一样的问题!当时本地用Google SDK测试Airflow任务完全正常,但一到K8s容器执行就报No module named xxx的错误,折腾了好一阵才搞明白原因和解决办法:

问题根源

Cloud Composer的Kubernetes任务容器默认不会把DAG目录添加到Python的系统路径中。虽然用gcloud composer environments run这类命令测试时,是直接在Composer的控制节点环境中运行,能访问到DAG目录下的文件,但K8s创建的独立任务容器有自己的Python路径配置,导致找不到同目录的自定义模块。

可行的解决方案

1. 将自定义模块安装到Composer的Python环境

这是最稳妥的长期方案,适合需要多个DAG共享的模块:

  • 把你的自定义Python代码打包成标准的Python包(比如生成.whl或.tar.gz文件),或者直接在requirements.txt里指定本地包路径(如果是私有包的话)。
  • 然后用gcloud命令更新Composer环境,安装这些包:
    gcloud composer environments update YOUR_COMPOSER_ENV_NAME \
      --location YOUR_REGION \
      --update-pypi-packages-from-file requirements.txt
    
    这样你的模块会被安装到所有任务容器的Pythonsite-packages目录,Web UI和K8s任务都能正常导入。

2. 手动在DAG中添加DAG目录到Python路径

如果只是临时应急,或者单个DAG需要用到同目录模块,可以在DAG文件开头添加这段代码:

import sys
import os
# 把当前DAG所在的目录添加到Python路径
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))

# 现在就能正常导入同目录的模块了
import tester

这种方法不用修改Composer环境配置,但每个需要用到该模块的DAG都要加这段代码,适合小范围使用。

3. 利用Cloud Composer的Plugins目录

Composer专门提供了Plugins目录(对应GCS存储桶里的gs://YOUR_COMPOSER_BUCKET/plugins/),Airflow会自动把这个目录加入Python系统路径:

  • 把你的tester.py上传到GCS的Plugins目录下;
  • 直接在DAG文件里import tester即可,不用额外配置路径。
    这个方法适合管理多个共享的工具类模块,维护起来很方便。

注意事项

  • 如果使用方法2,要确保DAG文件的路径在Composer环境中能被正确解析,os.path.abspath(__file__)不会出现路径错误;
  • 优先推荐方法1或3,尤其是方法3,更符合Airflow和Cloud Composer的最佳实践。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:02:39