728x90
반응형
Airflow DAG를 만들면서 `PythonOperator`에서 내가 만든 파이썬 함수를 import하려고 했다.
근데 생각대로 되지 않았기에 기록을 남기려 한다. ㅠㅠ
예를 들어 이런 구조로 작업 중이었다.
dags/
└── repo/
└── client-test/
└── soobin/
├── tutorial.py
├── update_pending_records.py
처음에는 `tutorial.py`에서 상대경로로 import를 시도했었다.

시도 1
from .update_pending_records import update_pending_records
시도 2
from ape.update_pending_records import update_pending_records
하지만 DAG이 Airflow에 등록되면서 바로 깨졌다.
Airflow 로그에는 이런 메시지가 떴다.
ImportError: attempted relative import with no known parent package
상대경로 import는 일반적인 Python 모듈에서는 잘 되지만,
Airflow에서는 DAG 파일이 “루트 스크립트”처럼 실행되기 때문에 상대경로를 허용하지 않는다.
그래서 이런 방식을 시도해봤다 ✅

Airflow는 기본적으로 dags/ 경로를 PYTHONPATH로 인식한다는 점에 착안해서, 절대 경로 import를 시도해봤다.
import os
import sys
# 현재 파일 기준으로 상위 디렉토리를 경로에 추가
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
from ape.update_pending_records import update_pending_records
이렇게 하니까 DAG import 에러가 깨끗이 사라지고, 정상적으로 실행되었다.
요약하자면
- Airflow는 상대경로 import를 기본적으로 지원하지 않는다
- from .xxx import yyy 는 사용하지 말자 (깨진다)
- 절대경로 import가 가장 안전하다
- 필요하다면 sys.path.append()를 활용해서 명시적으로 경로를 추가할 것
728x90
반응형
'개발중 > AirFlow' 카테고리의 다른 글
[Airflow] 아주 간단한 DAG 실행시키기 (0) | 2025.04.03 |
---|---|
[Airflow] Airflow 병렬 처리의 함정: Worker 분산 없이 처리하면? (0) | 2024.10.10 |
[AirFlow] 특정 Role 만 특정 Dag 권한주고 싶다. (0) | 2024.10.08 |
[AirFlow] airflow 사용자 생성 / REST API (0) | 2024.10.08 |
[Airflow] example_datasets.py 에러 (1) | 2024.10.08 |
댓글