Airflow 无法为具有自定义名称的插件文件夹导入插件

Airflow Failed To Import Plugin for a plugin folder with custom name

我要处理一个共享的 Airflow 1.10 项目,所以我克隆了存储库,结构如下:

airflow
├── airflow.cfg
├── airflow.db
├── dags
│   ├── dags_here.py
│      
├── dags_conf
│   ├── some settings for dags
│   │   └── settings.py
│   │   ├── __init__.py
│   │   ├── settings.py
│   │   └── todo.txt
|   |__ init.py
|
├── utilities
│   ├── __init__.py
│   └── some_name
│       ├── airflow
│       │   └── hooks.py
            └── sensors.py
            └── plugins.py
│       ├── common
│       │   ├some_other_code_files.py
│       ├── __init__.py
|
├── README.md
├── unittests.cfg
└── venv
    ├── lib64 -> lib
    └── pyvenv.cfg

但是当我尝试列出 dags 时,我遇到了这个错误:

plugins_manager.py:225} ERROR - No module named 'common' Traceback (most recent call last): File "/home/xxx/venv/lib/python3.8/site-packages/airflow/plugins_manager.py", line 218, in m = imp.load_source(namespace, filepath) File "/usr/lib/python3.8/imp.py", line 171, in load_source module = _load(spec) File "", line 702, in _load File "", line 671, in _load_unlocked File "", line 783, in exec_module File "", line 219, in _call_with_frames_removed File "/home/xxx/airflow/utilities/xxx/common/insert_obj.py", line 3, in from common.xxxxx import Class_name ModuleNotFoundError: No module named 'common' [2021-05-30 23:13:05,933] {plugins_manager.py:226} ERROR - Failed to import plugin /home/xxxx/airflow/utilities/xxxxx/common/dag_file.py

我在 may airflow.cfg 中尝试了以下配置,但总是出现相同的错误: plugins_folder=/home/xxx/airflow/utilities

在名为 plugins 的 Airflow 文件夹中添加一个带有 __init__.py 文件的父目录,并在其中复制实用程序: plugins_folder=/home/xxx/airflow/plugins

确认 Airflow 使用的环境变量或 airflow.cfg 设置的配置方式。

环境变量

AIRFLOW_HOME=<YOUR_PROJ>
AIRFLOW__CORE__DAGS_FOLDER=$AIRFLOW_HOME/dags
AIRFLOW__CORE__PLUGINS_FOLDER=$AIRFLOW_HOME/utilities

airflow.cfg

dags_folder = {AIRFLOW_HOME}/dags
plugins_folder = {AIRFLOW_HOME}/utilities

另外,看看PYTHONPATH中配置了什么:

import sys
from pprint import pprint

pprint(sys.path)

# [
#  '/ssddisk/project_name/dags',
#  '/ssddisk/project_name/config',
#  '/ssddisk/project_name/utilities',
#  ...
#  ]

有关详细信息,请参阅文档:https://airflow.apache.org/docs/apache-airflow/stable/howto/custom-operator.html#creating-a-custom-operator