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

Airflow从2.0.2升级至2.8.1后出现ImportError问题求助

Airflow 2.0.2 升级到 2.8.1 报错问题

我在本地开发环境尝试将Airflow版本从2.0.2升级到2.8.1,但出现如下错误。回退至2.0.2版本时一切正常,请问有人知道问题所在吗?

local-runner-1  | 上述异常是导致后续异常的直接原因:
local-runner-1  | 
local-runner-1  | 回溯(最近的调用最后):
local-runner-1  |   文件 "/usr/local/airflow/.local/lib/python3.11/site-packages/airflow/models/dagbag.py", 第344行, 在 parse中
local-runner-1  |     loader.exec_module(new_module)
local-runner-1  |   文件 "<frozen importlib._bootstrap_external>", 第940行, 在 exec_module中
local-runner-1  |   文件 "<frozen importlib._bootstrap>", 第241行, 在 _call_with_frames_removed中
local-runner-1  |   文件 "/usr/local/airflow/dags/my-dag-folder/other_folder/dag_data_export.py", 第5行, 在 <module>中
local-runner-1  |     from common.create_task import create_task
local-runner-1  |   文件 "/usr/local/airflow/plugins/common/create_task.py", 第1行, 在 <module>中
local-runner-1  |     from common.my_ssh_operator import YmSSHOperator
local-runner-1  |   文件 "/usr/local/airflow/plugins/common/my_ssh_operator.py", 第4行, 在 <module>中
local-runner-1  |     from airflow.contrib.operators.ssh_operator import SSHOperator
local-runner-1  |   文件 "/usr/local/airflow/.local/lib/python3.11/site-packages/airflow/utils/deprecation_tools.py", 第63行, 在 getattr_with_deprecation中
local-runner-1  |     raise ImportError(error_message) from e
local-runner-1  | ImportError: 尝试导入 `airflow.contrib.operators.ssh_operator.SSHOperator` 时无法导入 `airflow.providers.ssh.operators.ssh.SSHOperator`。
local-runner-1  | ERROR [airflow.models.dagbag.DagBag] 导入失败: /usr/local/airflow/dags/my-dag-folder/other_folder/dag_data_rdbms_export.py
local-runner-1  | 回溯(最近的调用最后):
local-runner-1  |   文件 "/usr/local/airflow/.local/lib/python3.11/site-packages/airflow/utils/deprecation_tools.py", 第56行, 在 getattr_with_deprecation中
local-runner-1  |     return getattr(importlib.import_module(new_module), new_class_name)
local-runner-1  |                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
local-runner-1  |   文件 "/usr/local/lib/python3.11/importlib/__init__.py", 第126行, 在 import_module中
local-runner-1  |     return _bootstrap._gcd_import(name[level:], package, level)
local-runner-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
local-runner-1  |   文件 "<frozen importlib._bootstrap>", 第1204行, 在 _gcd_import中
local-runner-1  |   文件 "<frozen importlib._bootstrap>", 第1176行, 在 _find_and_load中
local-runner-1  |   文件 "<frozen importlib._bootstrap>", 第1126行, 在 _find_and_load_unlocked中
local-runner-1  |   文件 "<frozen importlib._bootstrap>", 第241行, 在 _call_with_frames_removed中
local-runner-1  |   文件 "<frozen importlib._bootstrap>", 第1204行, 在 _gcd_import中
local-runner-1  |   文件 "<frozen importlib._bootstrap>", 第1176行, 在 _find_and_load中
local-runner-1  |   文件 "<frozen importlib._bootstrap>", 第1126行, 在 _find_and_load_unlocked中
local-runner-1  |   文件 "<frozen importlib._bootstrap>", 第241行, 在 _call_with_frames_removed中
local-runner-1  |   文件 "<frozen importlib._bootstrap>", 第1204行, 在 _gcd_import中
local-runner-1  |   文件 "<frozen importlib._bootstrap>", 第1176行, 在 _find_and_load中
local-runner-1  |   文件 "<frozen importlib._bootstrap>", 第1140行, 在 _find_and_load_unlocked中
问题原因与解决办法
  • 原因:Airflow 2.x 开始将原contrib目录下的模块迁移到providers包体系中,airflow.contrib.operators.ssh_operator.SSHOperator已被废弃,2.8.1版本不再默认提供该旧路径的兼容导入,且大概率你未安装对应的SSH providers包。
  • 解决步骤:
    1. 修改代码导入路径:打开/usr/local/airflow/plugins/common/my_ssh_operator.py,将第4行的旧导入语句
      from airflow.contrib.operators.ssh_operator import SSHOperator
      
      替换为新路径
      from airflow.providers.ssh.operators.ssh import SSHOperator
      
    2. 安装SSH providers包:执行以下命令完成安装
      pip install apache-airflow-providers-ssh
      
    3. 版本兼容检查:确保安装的providers版本与Airflow 2.8.1匹配,避免版本冲突。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 09:17:05