Airflow没有为airflow_home目录中的目录命名的模块

时间:2017-08-20 09:50:17

标签: python airflow

我正在使用virtualenv。我正在尝试在DAG文件夹中使用包。 airflow_home目录的当前状态为:

airflow_home/airflow.cfg
airflow_home/airflow.db
airflow_home/dags/__init__.py 
airflow_home/dags/hello_world.py
airflow_home/dags/support/inner.py
airflow_home/dags/support/__init__.py 

hello_world.py有代码:

from datetime import datetime
from airflow import DAG
from airflow.operators.dummy_operator import DummyOperator
from airflow.operators.python_operator import PythonOperator
from dags.support import inner


def print_hello():
    return 'Hello world'

dag = DAG('hello_world', description='simple tutorial DAG',
          schedule_interval='0 12 * * *', start_date=datetime(2017, 8, 20), catchup=False)

dummy_operator = DummyOperator(task_id='dummy_task', retries=3, dag=dag)

hello_operator = PythonOperator(task_id='hello_task', python_callable=print_hello, dag=dag)

hello_from_inner_operator = PythonOperator(task_id='hello_from_inner', python_callable=inner.hello_from_inner, dag=dag)

dummy_operator >> hello_operator
hello_operator >> hello_from_inner_operator

如果我可以手动运行此脚本,它会运行。但后来我启动了气流调度程序,

Broken DAG: No module named 'dags'
出现

错误。我做错了什么,解决这个问题的方法是什么?

2 个答案:

答案 0 :(得分:5)

使用sys.path代替。

当气流开始时,路径dags将添加到{{1}}。因此它将搜索{{1}}目录下的模块。

答案 1 :(得分:0)

如果您在virtualenv内部安装了一个包,并且您在该virtualenv外部运行了一个气流实例,它可能不知道您希望它使用虚拟环境。

要查看您是否遇到此问题,请运行:

(myAwesomeVenv) $ which airflow

    /path/to/some/airflow

如果它给出了 virtualenv 之外的路径,那么请确保气流在 virtualenv 中,并且您调用的是正确的。

我在我的 virtualenv 中做了 pip install apache-airflow,然后像这样隐藏了外部实例:

 mv /home/matt/.local/bin/airflow /home/matt/.local/bin/airflow.bak

在此之后,我得到了:

(myAwesomeVenv) $ which airflow

    /home/matt/src/foo/venv/bin/airflow

...然后我的导入开始工作了。