ImportError: cannot import name 'Literal' from 'typing' 에러 해결

songeunm·2024년 6월 13일

06/13 (목)
airflowdbt-day2-2-데모-구글시트연동하기(1) 수강.

구글 시트를 Redshift table과 연동하는 실습에서 해당 DAG가 뜨지 않아 airflow dags list-import-errors를 실행해보니 다음과 같은 에러메시지를 확인할 수 있었다.

분명 docker-compose.yaml파일에 _PIP_ADDITIONAL_REQUIREMENTS:부분에 gspread를 명시해줬는데, 이전에는 gspread를 import할 수 없다는 에러가 떴다.
이 때문에 airflow scheduler를 sh로 interactive하게 실행하여 따로 pip3 install gspread를 실행시켜 설치를 확인했다.
물론 설치는 되어있었다.

이에 대한 구글링 결과 Python 3.8 이하의 버전에서는 다른 방식으로 import 해주어야한다는 사실을 알게 되었다.

try:
    from typing import Literal
except ImportError:
    from typing_extensions import Literal

위와 같이 import를 하면 된다고 하는데 나는 이 또한 먹히지 않았다...

내가 늦게 밀려서 강의를 듣고있는 만큼 다른 수강생분들이 먼저 이 에러를 접하고 질문하지 않았을까 학습질문 채널을 찾아봤더니 같은 에러를 접한 분이 계셨다!
해당 질문의 답변으로부터 에러의 해결법을 알 수 있었다.

난 저 모듈을 import하지 않았는데 import 에러가 난다는 것은 여기서 특별히 설치하고 import 했던 모듈인 gspread에 Literal 모듈이 포함돼있는 것이라고 생각된다. (확실하지 않다.)
위 코드의 경우는 python 버전에 맞추어 Literal의 import 방법을 변경한 것이고, 제시된 해결법은 python 버전에 맞추어 (Literal이 포함됐을 것이라고 생각되는) gspread의 버전을 낮추어 설치하는 것이다.

pip3 install gspread==3.6.0

gspread를 3.6.0 버전으로 재설치하고난 뒤 에러가 해결됨을 확인할 수 있었다.

profile
데굴데굴 구르는 개발자 지망생

0개의 댓글