YEAR Apache Airflow DAG 错误导入 EcsOperator
MWAA Apache Airflow DAG error importing EcsOperator
我正在尝试将 Airfow DAG 部署到 MWAA。
我的requirements.txt
:
apache-airflow[amazon] == 3.2.0
我这样导入 EcsOperator
:
from airflow.contrib.operators.ecs_operator import EcsOperator
但是,我得到这个错误:
Broken DAG: [/usr/local/airflow/dags/mydag.py] Traceback (most recent call last):
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "/usr/local/airflow/dags/mydag.py", line 4, in <module>
from airflow.contrib.operators.ecs_operator import EcsOperator
ImportError: cannot import name 'EcsOperator' from 'airflow.contrib.operators.ecs_operator' (/usr/local/lib/python3.7/site-packages/airflow/contrib/operators/ecs_operator.py)
我做错了什么?
What am I doing wrong here?
您可能引用了不同版本的 Airflow 文档(1.10.12?)。
airflow.contrib.operators.ecs_operator (1.10.12)
3.2.0
的文档是 here。您可以像这样导入 EcsOperator
:
from airflow.providers.amazon.aws.operators.ecs import EcsOperator
正确的requirements.txt
:
(空)
以及正确的导入:
from airflow.providers.amazon.aws.operators.ecs import ECSOperator
注意大小写!
这里有几个问题,所以我会编译一个详细的答案,因为以前的答案没有涵盖所有问题。
首先,更新后的导入路径(provider release 3.2.0)为:
from airflow.providers.amazon.aws.operators.ecs import EcsOperator
这对您不起作用的原因是因为您安装了带有附加功能的提供程序:
apache-airflow[amazon]
如 provider extra docs 中所述,当以这种方式安装提供程序时,您将获得在您使用的 Airflow 版本时发布的提供程序版本。因此,您不能保证获得更新的提供程序版本。因此,如果您使用的是 Airflow 2.2.4(在撰写此答案时为最新版本),您将获得亚马逊提供商版本 3.0.0,这不是最新版本。
要获取更新的提供程序,您应该将其安装为:
pip install apache-airflow-providers-amazon
如果您想选择特定版本,则:
pip install apache-airflow-providers-amazon==3.2.0
请注意,您应该始终从 Airflow 提供的约束文件进行安装。示例:
pip install "apache-airflow-providers-amazon" --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-main/constraints-3.7.txt"
请注意,提供商指的是不断更新的 constraints-main,而不是 constraints-2.2.4
或任何其他特定的 Airflow 版本。
您可以在有关 Installation and upgrading of Airflow providers separately.
的文档中阅读更多相关信息
我正在尝试将 Airfow DAG 部署到 MWAA。
我的requirements.txt
:
apache-airflow[amazon] == 3.2.0
我这样导入 EcsOperator
:
from airflow.contrib.operators.ecs_operator import EcsOperator
但是,我得到这个错误:
Broken DAG: [/usr/local/airflow/dags/mydag.py] Traceback (most recent call last):
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "/usr/local/airflow/dags/mydag.py", line 4, in <module>
from airflow.contrib.operators.ecs_operator import EcsOperator
ImportError: cannot import name 'EcsOperator' from 'airflow.contrib.operators.ecs_operator' (/usr/local/lib/python3.7/site-packages/airflow/contrib/operators/ecs_operator.py)
我做错了什么?
What am I doing wrong here?
您可能引用了不同版本的 Airflow 文档(1.10.12?)。
airflow.contrib.operators.ecs_operator (1.10.12)
3.2.0
的文档是 here。您可以像这样导入 EcsOperator
:
from airflow.providers.amazon.aws.operators.ecs import EcsOperator
正确的requirements.txt
:
(空)
以及正确的导入:
from airflow.providers.amazon.aws.operators.ecs import ECSOperator
注意大小写!
这里有几个问题,所以我会编译一个详细的答案,因为以前的答案没有涵盖所有问题。
首先,更新后的导入路径(provider release 3.2.0)为:
from airflow.providers.amazon.aws.operators.ecs import EcsOperator
这对您不起作用的原因是因为您安装了带有附加功能的提供程序:
apache-airflow[amazon]
如 provider extra docs 中所述,当以这种方式安装提供程序时,您将获得在您使用的 Airflow 版本时发布的提供程序版本。因此,您不能保证获得更新的提供程序版本。因此,如果您使用的是 Airflow 2.2.4(在撰写此答案时为最新版本),您将获得亚马逊提供商版本 3.0.0,这不是最新版本。
要获取更新的提供程序,您应该将其安装为:
pip install apache-airflow-providers-amazon
如果您想选择特定版本,则:
pip install apache-airflow-providers-amazon==3.2.0
请注意,您应该始终从 Airflow 提供的约束文件进行安装。示例:
pip install "apache-airflow-providers-amazon" --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-main/constraints-3.7.txt"
请注意,提供商指的是不断更新的 constraints-main,而不是 constraints-2.2.4
或任何其他特定的 Airflow 版本。
您可以在有关 Installation and upgrading of Airflow providers separately.