J'essaie d'importer un module local (un script python) dans mon DAG.
Structure du répertoire:
airflow/
├── dag
│ ├── __init__.py
│ └── my_DAG.py
└── script
└── subfolder
├── __init__.py
└── local_module.py
Exemple de code dans 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()
Je reçois une erreur dans Airflow disant "DAG cassé: mon_DAG. Aucun module nommé 'local_module'.
J'ai mis à jour Airflow vers 1.9.0 mais cela ne résout pas le problème.
Merci.
Cela a généralement à voir avec la configuration d'Airflow.
Dans airflow.cfg
, assurez-vous que le chemin dans airflow_home
est correctement défini sur le chemin d'accès à la structure du répertoire Airflow.
Ensuite, Airflow analyse tous les sous-dossiers et les remplit afin que les modules puissent être trouvés.
Sinon, assurez-vous simplement que le dossier que vous essayez d'importer se trouve dans le chemin Python: Comment utiliser PYTHONPATH
La façon dont je le fais est la suivante:
Vous pouvez maintenant utiliser ce script dans votre 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
)