Airflow에서 PythonVirtualenvOperator를 사용할 때,
Task 실행 시마다 독립적인 가상환경(virtualenv) 이 자동으로 만들어집니다.
이 환경은 기본적으로 비어 있으며,
필요한 패키지를 직접 지정하지 않으면 어떤 외부 라이브러리도 사용할 수 없습니다.
이때 사용하는 옵션이 바로
👉 requirements 와 system_site_packages 입니다.
requirements — 필요한 패키지 직접 설치
requirements는 새로 만들어질 가상환경에
추가로 설치할 패키지 목록을 지정하는 옵션입니다.
PythonVirtualenvOperator(
task_id='example_task',
python_callable=my_function,
requirements=['pandas==2.1.0', 'requests'],
dag=dag,
)
이렇게 하면 Airflow는 Task 실행 전에
pip install pandas==2.1.0 requests 명령을 자동으로 수행한 뒤,
해당 환경에서 함수를 실행합니다.
즉, 필요한 패키지를 가상환경 안에 직접 설치하는 방법입니다.
system_site_packages — Airflow 환경의 패키지 함께 사용
system_site_packages=True 옵션은
“Airflow의 메인 Python 환경(시스템 환경)에 이미 설치된 패키지를,
새로 만든 가상환경에서도 함께 사용할 수 있게 해준다”
는 의미입니다.
PythonVirtualenvOperator(
task_id='example_task',
python_callable=my_function,
system_site_packages=True,
dag=dag,
)
이 옵션을 켜면, Airflow 환경에 이미 설치된
pandas, numpy, requests 같은 패키지를
다시 설치하지 않고 바로 사용할 수 있습니다
즉, Airflow 환경의 라이브러리를 가상환경에서도 재활용하는 옵션입니다.
두 옵션을 함께 쓰면?
이 두 옵션은 서로 충돌하지 않습니다.
오히려 함께 사용하면 더 효율적입니다.
def use_color_and_pandas():
import pandas as pd
from colorama import Fore
print(Fore.GREEN + f"Pandas version: {pd.__version__}")
PythonVirtualenvOperator(
task_id='virtualenv_combined',
python_callable=use_color_and_pandas,
system_site_packages=True, # Airflow 환경 패키지 재사용
requirements=['colorama==0.4.0'], # colorama만 추가 설치
dag=dag,
)
이렇게 하면:
- pandas → Airflow 시스템 환경에서 그대로 사용
- colorama → 가상환경 내에서 새로 설치
✅ Airflow 환경 + 추가 패키지를 조합한 “공유형 가상환경”을 구성할 수 있습니다.
정리하면
Airflow의 PythonVirtualenvOperator는 매우 유연합니다.
system_site_packages=True로 기존 패키지를 재활용하고,
requirements로 부족한 라이브러리만 추가 설치하면
불필요한 설치를 줄이면서도 필요한 환경을 깔끔하게 구성할 수 있습니다.
'컨테이너·워크플로우 자동화 > Airflow로 워크플로우 자동화하기' 카테고리의 다른 글
| Airflow XCom과 ShortCircuitOperator 이해하기 (0) | 2025.10.18 |
|---|---|
| Airflow ShortCircuitOperator — 조건에 따라 Task 실행 제어하기 (0) | 2025.10.18 |
| Airflow의 PythonVirtualenvOperator — 왜 requirements를 지정해야 할까? (0) | 2025.10.17 |
| Airflow의 PythonVirtualenvOperator — 왜 함수 안에 import를 넣어야 할까? (0) | 2025.10.17 |
| Airflow의 Operator와 Sensor — 태스크의 핵심 구성요소 이해하기 (0) | 2025.10.14 |