inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

Airflow 마스터 클래스

외부 파이썬 함수 수행하기

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

해결된 질문

586

rosy

작성한 질문수 21

0

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

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

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

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

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

dags_python_import_func.py에서도

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

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

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

python 데이터-엔지니어링 airflow

답변 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 부분을 인식하지 못하는 문제는 해결 될거에요!

 

 

 

0

rosy

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

1

김현진

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

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

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

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

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

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

 

참고하셔요 ^^

 

0

인프런 AI 인턴

안녕하세요, 인프런 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 환경 변수 설정법에 대해서도 고려해보시면 도움이 될 것입니다.

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

pykrx 회원제 전환으로 인한 실습 불가

0

102

2

수료증 발급

0

78

3

에러 발생 관련 질문드립니다.

0

77

2

vscode 작업화면에 오류가 발생하지 않습니다.

0

68

2

plugins 폴더 생성

0

73

2

WSL에서 git push 가 안되요 ㅠ

0

107

2

chatGPT&Airflow로 블로그 자동 포스팅하기 는 Deprecated 가 필요합니다.

0

65

2

github에 회원가입이 안되는데 원인이 뭔지 모르겠어요 ㅠ

0

704

2

설치중인데 venv를 꼭 써야할까요?

0

119

2

설치 버전 관련 질문입니다.

0

66

1

우분투 버전 다운받아야하는데 어떤걸로 설치해야할까요?

0

60

1

DAG 만들기 중 airflow 패키지 로드 에러

0

104

2

3.0에서도 수업노트가 성립하는지 확인 부탁드립니다!

0

94

3

task_id 사용법이 뭔가 바뀐 것 같습니다.

0

75

3

email operator 오류 관련

0

63

2

plugins 폴더 관련

0

91

2

bash operator 관련 문의입니다

0

77

3

스케쥴러 - DAG 파싱 부하 줄이는 과정 질문

0

78

2

Dags refresh 주기 관련 질문

0

123

2

wsl 관련 질문입니다.!

0

72

2

macOS에서 docker 설치

0

92

2

템플릿 변수에 대한 오류

0

58

2

custom_image 디렉토리 문의드립니다.

0

51

2

ETL 인터뷰 관련 문의

0

100

2