Summary

  • Airflow는 자동으로 dags 폴더와 plugins 폴더를 sys.path에 추가한다.
  • VSCode(개발환경)와 Airflow(가상환경)는 plugins 경로 인식 방식이 달라 import 오류가 발생할 수 있다.
  • local과 airflow 경로 불일치 오류는 .env 파일에 PYTHONPATH를 추가해 해결한다.

Python 모듈 경로 이해

import sys
from pprint import pprint
pprint(sys.path)  # 현재 python 경로 확인

Airflow 장점: 자동으로 dags와 plugins 폴더를 sys.path에 추가한다.


plugins 폴더 활용

# plugins/common/common_func.py 에 함수 작성 후
from common.common_func import get_sftp

오류 원인

환경작성 방법이유
VSCode (개발환경)from plugins.common.common_func최상위 폴더인 airflow 폴더가 path로 잡힘
Airflow (가상환경)from common.common_funcplugins 폴더가 이미 path로 잡혀있음

해결 방안

.env 파일에 PYTHONPATH를 추가한다.

WORKSPACE_FOLDER=/Users/haejun/airflow
PYTHONPATH=${WORKSPACE_FOLDER}/plugins

외부 함수 실행 예시

from airflow import DAG
import pendulum
from airflow.operators.python import PythonOperator
from common.common_func import get_sftp
 
with DAG(
    dag_id="dags_python_import_func",
    schedule="23 8 * * *",
    start_date=pendulum.datetime(2024, 8, 22, tz="Asia/Seoul"),
    catchup=False
) as dag:
 
    task_get_sftp = PythonOperator(
        task_id='task_get_sftp',
        python_callable=get_sftp
    )
    task_get_sftp