ローカルモジュール(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に更新しましたが、これで問題が解決しません。
ありがとう。
これは通常、Airflowの構成方法に関係しています。
airflow.cfg
で、airflow_home
のパスがAirflowディレクトリ構造が存在するパスに正しく設定されていることを確認します。
次に、Airflowはすべてのサブフォルダーをスキャンし、モジュールを見つけることができるようにそれらを設定します。
それ以外の場合は、インポートしようとしているフォルダがPythonパス: PYTHONPATHの使用方法 にあることを確認してください。
私のやり方は次のとおりです:
これで、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
)