홍카나의 공부방

[Airflow] 외부 모듈에서 라이브러리 No module 문제 해결하기 본문

Data Engineering/Airflow

[Airflow] 외부 모듈에서 라이브러리 No module 문제 해결하기

홍문관카페나무 2023. 12. 16. 18:06

plugins 폴더에 있는 외부 모듈에서

외부 라이브러리를 import하는데 airflow에서 이를 찾을 수 없다는 오류 메시지가 나왔다.

 

분명 로컬 파이썬 가상환경에서 해당 라이브러리를

pip install로 설치했는데도 불구하고 인식못하는 것이다.

 


 

1. 문제 원인

 

> 처음 Airflow를 설치할 때 Airflow를 실행할 파이썬 환경에 해당 라이브러리가 같이 설치되지 않았다.

 

Numpy나 Pandas와 같은 대중적인 라이브러리의 경우,

Airflow 공식 이미지로 컨테이너를 설치할 때 기본적으로 같이 설치되지만 특정한 라이브러리는 그렇지 않다.

 

로컬에서 .env로 PYTHONPATH를 맞춰주는 등

로컬단에서의 해결 방법을 다 시도해봤는데 여전히 no module 문제가 발생한다면

Airflow의 파이썬 환경에서 문제가 발생 했을 가능성이 있다.

 

그리고 만약 DAG를 구현하면서 새로 추가해야할 모듈은

어떻게 설치해야 할까?

 

2. 문제 해결

 

1. 외부 라이브러리를 포함한 DockerFile을 구성해서 이미지로 만든 뒤, 이를 기반으로 컨테이너를 만든다.

 

예시로 Python 가상환경에서 requirements를 모두 설치한 뒤에,

requirements.txt를 만들고 이를 설치하도록 Dockerfile에 추가하는 것이다.

 

FROM apache/airflow:2.7.3-python3.11
COPY requirements.txt /
RUN pip install --no-cache-dir "apache-airflow==${AIRFLOW_VERSION}" -r /requirements.txt

 

예시 Dockerfile은 위와 같다.

 

이후

docker-compose build

docker-compose up

을 진행해준다.

 

아래 블로그를 참고하면 더 좋다!

https://jetechnology.tistory.com/9

 

[Airflow] Docker Compose 기반 Airflow 구성과 주식 메타데이터 추출과 적재

Airflow는 DAG라는 작업 단위를 통해 Data Processing에 필요한 작업을 수행하고 스케줄링, 시각화해주는 도구다. Airflow 관련 내용은 별도로 정리를 할 예정이다. 회사에서 Airflow를 구축할 때는 VM을 할

jetechnology.tistory.com

https://velog.io/@sophi_e/Airflow-docker-compose%EB%A1%9C-%EC%97%90%EC%96%B4%ED%94%8C%EB%A1%9C%EC%9A%B0-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0#5-yamldockerfile%EB%A1%9C-%EC%9D%B4%EB%AF%B8%EC%A7%80-%EC%BB%A4%EC%8A%A4%ED%85%80%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95

 

[Airflow] docker-compose로 에어플로우 설치하기

초보자들도 과정을 따라하며 쉽게 에어플로우를 개발할 수 있도록 정리한 에어플로우 설치 방법입니다. Dockerfile을 이용하여 필요 패키지를 커스텀하여 이미지로 빌드하는 방법도 함께 정리하

velog.io

 

 

 

2. docker-compose.yaml 내부의 PIP_ADDITIONAL_REQUIREMENTS를 수정한다.

 

 

어떻게 보면 이게 더 쉬운 방법인데,

처음에 이 방법을 찾지 못하고 헤맸다.

 

docker-compose.yaml

 

x-airflow-common에서 _PIP_ADDITIONAL_REQUIREMENTS의 값을 변경하면 된다.

 

> _PIP_ADDITIONAL_REQUIREMENTS: ${_PIP_ADDITIONAL_REQUIREMENTS:- yfinance pandas}

 

이런식으로 말이다.

반응형