如何为airflow DAG任务(或python代码)安装依赖模块?, 使用 kuberentesExecutor 时气流 DAG 中“无法导入模块”

vee*_*til 8 airflow kubernetespodoperator

我有一个气流 DAG“example_ml.py”,它有一个任务“train_ml_model”,该任务正在调用/运行 python 脚本“training.py”。

-Dags/example_ml.py -Dags/training.py

当我运行 Dag 时,无法导入执行训练脚本所需的模块。 导入sklearn模块出错

DAG任务的代码片段:

   train_model = PythonOperator(
        task_id='train_model',
        python_callable=training,
        dag = dag
    )
Run Code Online (Sandbox Code Playgroud)

PS:我使用的是k8s集群。Airflow运行在k8s集群中,executor设置为kubernetesExecutor。因此,当每个 DAG 被触发时,就会分配一个新的 pod 来完成任务。

小智 1

我在两个依赖项(praw 和 supabase)中遇到了同样的问题。

这是我的解决方案:

  1. 将依赖项添加到requirements.txt 文件:

    为此,请使用 列出您的依赖项pip freeze。然后,选择要在 Airflow 中安装的目标依赖项。最后,复制依赖项及其版本。例如:supabase==2.3.3

  2. 通过添加以下内容来修改 Dockerfile 以复制要求并安装它们:

    COPY requirements.txt /requirements.txt
    RUN pip install --user --upgrade pip
    RUN pip install --no-cache-dir --user -r /requirements.txt
    
    
    Run Code Online (Sandbox Code Playgroud)
  3. 构建一个新的 Docker 镜像:

    docker build . --tag extending_airflow:latest

  4. 最后,调出您的环境:

    docker-compose up -d --no-deps --build airflow-webserver airflow-scheduler

我希望这可以帮助你!