web-dev-qa-db-ja.com

Airflow DAGでのローカルモジュール(Pythonスクリプト)のインポート

ローカルモジュール(pythonスクリプト)をDAGにインポートしようとしています。

ディレクトリ構造:

airflow/
├── dag
│   ├── __init__.py
│   └── my_DAG.py
└── script
    └── subfolder
        ├── __init__.py
        └── local_module.py

My_DAG.pyのサンプルコード:

#trying to import from local module
from script.subfolder import local_module  

#calling a function in local_module.py  
a = some_function()  

Airflowで「壊れたDAG:my_DAG。 「local_module」という名前のモジュールはありません。

Airflowを1.9.0に更新しましたが、これで問題が解決しません。

  • ここでの解決策は何ですか?
  • 私はまた、プラグインを作成することによってこれを解決できるとどこかで読んだ。誰か私がこれを行う方法を指摘できますか?

ありがとう。

18
badangatal

これは通常、Airflowの構成方法に関係しています。

airflow.cfgで、airflow_homeのパスがAirflowディレクトリ構造が存在するパスに正しく設定されていることを確認します。

次に、Airflowはすべてのサブフォルダーをスキャンし、モジュールを見つけることができるようにそれらを設定します。

それ以外の場合は、インポートしようとしているフォルダがPythonパス: PYTHONPATHの使用方法 にあることを確認してください。

3
tobi6

私のやり方は次のとおりです:

  1. main()関数を使用して、サブフォルダーにPythonスクリプトを作成します。
  2. dAGファイルに、サブフォルダーとファイルのパス宣言を含めます

これで、PythonOperatorでこのスクリプトを使用できます

import sys
sys.path.insert(0,"/root/airflow/dags/subfolder"))
import subfolder.script_name as script
...    
t1=PythonOperator(
    task_id='python_script',
    python_callable=script.main,
    dag=dag
)
0
Shaby