인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

rosy님의 프로필 이미지
rosy

작성한 질문수

Airflow 마스터 클래스

외부 파이썬 함수 수행하기

파이참에서 외부 파이썬 함수 수행하기

해결된 질문

작성

·

376

0

안녕하세요. 외부 파이썬 함수 수행하기가 안되어서 문의드리게 되었습니다.

저는 Pycharm이 익숙해서 Pycharm으로 하고 있었는데,

Pycharm의 경우 .env파일이 인식이 안되는 걸까요..?

common 모듈을 발견하지 못하네요...

.env파일을 아래와 같이 설정하였고

dags_python_import_func.py에서도

Enable EnvFile에 체크표시를 하였는데

여전히 해당 모듈을 읽지 못하네요...ㅠㅠ

혹시 Pycharm의 경우 .env파일을 다르게 설정해야하는 걸까요...?

답변 2

0

김현진님의 프로필 이미지
김현진
지식공유자

안녕하세요 rosy님

우선 구분해야할 것이,

1) airflow가 common을 인식하지 못한 것은

2) rosy님 로컬에 설치한 파이참에서 from common 부분을 인식하지 못해 빨간줄 그어진 것과

 

서로 다른 문제입니다.

우선 1)의 원인 먼저 확인을 해볼까요?

우선 ModuleNotFoundError를 내뱉은 것은 정확히는 scheduler 가 내뱉은 에러이고, scheduler 컨테이너가 plugins/common/common_func.py 를 잘 인식하고 있는지 확인을 해봐야 합니다.

WSL에서 스케줄러 컨테이너 안으로 진입한 후 plugins/common/common_func.py 파일이 잘 있는지부터 확인해볼께요

sudo docker ps 
sudo docker exec -it {scheduler 컨테이너ID} bash 

위 명령으로 스케줄러 컨테이너로 진입한 후

$ cd /opt/airflow/plugins/common
$ ls

이렇게 해서 common_func.py 가 있는지 확인해보세요. 아마 없을겁니다.

그렇다면 docker-compose.yaml 파일에서, 볼륨 연결이 잘 안되었을 가능성이 있습니다.

Volumns 항목이 아래처럼 잘 작성되었는지 확인해보세요.

volumes:

- ${AIRFLOW_PROJ_DIR:-.}/airflow/dags:/opt/airflow/dags

- ${AIRFLOW_PROJ_DIR:-.}/logs:/opt/airflow/logs

- ${AIRFLOW_PROJ_DIR:-.}/airflow/plugins:/opt/airflow/plugins

- ${AIRFLOW_PROJ_DIR:-.}/airflow/files:/opt/airflow/files

 

 

다음으로 2)의 문제를 볼까요?

1)과 2)가 서로 다른 문제인 이유는, 위에서 설명드린 것처럼 Airflow가 파일을 못 찾은 것은 컨테이너 안에서 일어난 일입니다.

하지만 2)는 rosy 님의 로컬 컴퓨터에서 일어난 일이죠.

따라서 2)의 해결은 rosy님 pycharm 설정만 잘 해주면 끝납니다.

.env 설정은 VScode에서 하는 설정입니다 ^^

따라서 파이참의 경우 File --> Setting --> Project --> Project Interpreter 메뉴에 들어가면

현재 설정된 파이썬 인터프리터가 보입니다. 그거 선택 후 Show All 누르면

image

이런 메뉴가 나오구요 여기서 선택된 인터프리터 마우스 우클릭하면 Show Interpreter Paths 가 나옵니다.

image

그걸 선택하면 아래처럼 현재 인터프리터가 PYTHONPATH로 인식하고 있는 경로들이 나와요.

여기서 + 눌러서 airflow 설치된 디렉토리의 plugins 디렉토리를 add 해주시면 됩니다.

image

그럼 rosy 님의 파이참 환경에서 from common 부분을 인식하지 못하는 문제는 해결 될거에요!

 

 

 

rosy님의 프로필 이미지
rosy
질문자

전부 다 해결되었습니다! 감사합니다. airflow에서 DAG import error가 scheduler의 에러군요...! 하나 또 배워갑니다!! ㅎㅎ

김현진님의 프로필 이미지
김현진
지식공유자

깔끔히 해결되어서 제가 다 즐겁네요 ^^

에러 출력 과정을 추가로 설명드리자면 scheduler가 파일 검사 중 에러를 만나면

메타DB 중 import_error 라는 테이블에 기록을 남깁니다. (뒤에서 Postgres 메타DB 접속하는 부분을 배웁니다. 거기서 테이블을 찾을 수 있어요)

그리고 웹서버는 메타 DB의 import_error 테이블에 있는 기록을 보고 띄워주는 형식이에요.

문제가 해결되면 scheduler는 import_error에 있는 내용을 지우고

웹 서버도 에러를 표시를 안하게 되는 원리입니다.

 

참고하셔요 ^^

 

0

안녕하세요, 인프런 AI 인턴입니다.

rosy님께서 PyCharm을 사용하시면서 외부 파이썬 함수 수행이 안되는 문제에 대해 질문해주셨군요. 해당 문제에 대해 저희 강의 내에서 비슷한 상황을 다루고 있는 부분을 찾아서 도움을 드리고자 합니다.

이전 강의 질문에서도 비슷한 문제에 대한 질문이 있었습니다. “외부 파이썬 함수 수행하기 - workspace folder 질문” 이라는 제목으로, .env 파일 관련 설정에 대한 질문이 있었는데, 이에 대한 답변이 rosy님의 상황과 유사할 수 있어서 링크를 공유드리겠습니다.

강의 답변에서 언급된 내용을 요약해보면, .env 파일을 통한 환경변수 설정은 주로 로컬의 Python 개발 환경에 의존하며, airflow의 경우 Docker 내부에서 생성된 별도의 환경에서 실행되기 때문에, 로컬 환경의 설정이 Docker 내부에서도 동일하게 적용되도록 추가 설정이 필요합니다.

Docker를 사용하지 않을 경우, .env 파일을 직접 Python 스크립트에서 로드해 환경 변수로 설정하는 방법을 사용하거나, PyCharm 설정에서 환경 변수를 직접 입력하는 방법도 유용할 수 있습니다.

그리고 PyCharm에서 .env 파일을 인식시키기 위해서는 EnvFile 플러그인을 설치하고, 해당 플러그인을 통해 .env 파일을 Run Configuration에 추가하는 방법도 있습니다. 이미 rosy님께서 “Enable EnvFile”을 시도하셨는데 오류가 계속 된다면, EnvFile 플러그인 설정이 정확히 되었는지 혹은 .env 파일의 위치 및 형식을 다시 확인해보시는 게 좋겠습니다.

rosy님의 프로젝트 디렉토리 구조와 airflow, PyCharm 설정 등 다양한 요소에 따라 해결 방법이 달라질 수 있으니, 해당 강의의 질문과 답변을 참조하시되, 상황에 맞게 적용해보시기 바랍니다. 추가적으로, PyCharm 내 EnvFile 플러그인 설정 및 사용법, Docker 환경 변수 설정법에 대해서도 고려해보시면 도움이 될 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

rosy님의 프로필 이미지
rosy

작성한 질문수

질문하기