为每个 DAG 而不是 Airflow 中的每个任务创建 virtualenv

Cut*_*son 5 virtualenv airflow

现在我有以下 DAG(省略了一些不相关的语法)

from airflow.operator.python import PythonVirtualenvOperator
t1 = PythonVirtualenvOperator(requirements = req1)
t2 = PythonVirtualenvOperator(requirements = req2)
t3 = PythonVirtualenvOperator(requirements = req3)
t4 = PythonVirtualenvOperator(requirements = req1) #Yes, its the same as t1

t1>>t2>>t3>>t4
Run Code Online (Sandbox Code Playgroud)

我是 venvs 的忠实粉丝,由于我们是多人在同一台服务器上部署 DAG,因此我们可以将版本分开。问题是,上面我们必须为每个任务创建一个 venv(这需要一些时间,不是很多,而是一些),并且需求中的很多包都是相同的。

是否有办法为特定 DAG 创建虚拟环境,从而能够使用PythonOperatorPythonVirtualenvOperator?或者是为每个 DAG 创建 Docker 容器的最佳方法?

Cut*_*son 0

在 Airflow 2.4.0 中,他们使用ExternalPythonOperator应该可以解决这个问题,pr。这个Github 问题