如何在 Airflow 的 PythonVirtualenvOperator 中使用 requirements.txt 文件?

How to use requirements.txt file in Airflow's PythonVirtualenvOperator?

In Airflow 2.2.3, PythonVirtualenvOperator was updated 允许在要求参数中使用模板化 requirements.txt 文件。但是,我无法正确使用该参数。我正在寻求有关如何通过 Airflow 的 PythonVirtualenvOperator 正确使用 requirements.txt 文件的指导。

这是我的 /dags 格式:

dags
├── .airflowignore
├── daily.py
└── modules
    └── monday
        ├── monday.py
        └── requirements.txt

在daily.py中,我定义了我每天的DAG。我想引用 requirements.txt 的任务定义如下:

@task.virtualenv(requirements='modules/monday/requirements.txt')
def sync_board_items():
    from modules.monday.monday import sync_board_items
    import logging
    logging.basicConfig(level=logging.INFO)
    sync_board_items(board_id=XXXX, table=XXXX)

这似乎符合 GitHub 中描述的实现,因为 requirements 是一个字符串,而不是列表,并且它符合 *.txt 模板。但是,当任务运行时,我很快收到错误消息:

Executing cmd: /tmp/venvfn63dy3c/bin/pip install m o d u l e s / m o n d a y / r e q u i r e m e n t s . t x t
ERROR: Directory '/' is not installable. Neither 'setup.py' nor 'pyproject.toml' found.

这似乎表明 PythonVirtualenvOperator 正在将我的要求参数视为列表而不是字符串。换句话说,我做错了什么,PythonVirtualenvOperator 没有正确处理我的 requirements.txt 文件。我缺少什么或如何利用 Airflow 的 PythonVirtualenvOperator 中的 requirements.txt 文件?

该功能仅适用于 Airflow>=2.3.0,不适用于 2.2.3

目前2.3.0正在测试中。 2.3.0b1 可通过 pip 获得。

如果您想在 2.2.3 中使用此功能,您需要通过向后移植 PR 中的代码来创建自定义运算符。 使用 PR 和实用程序中的代码创建 MyPythonVirtualenvOperator 在 2.2.3

中应该可以正常工作