250730 TIL: Debug 모드에서의 ModuleNotFoundError

이슬비·2025년 7월 31일
0

TIL

목록 보기
10/10

앞으로 (거의 무조건) 평일에는 TIL을 작성해볼까 한다.
학부생 때 동아리 하면서는 한 번씩 했는데,
정말 눈코 뜰새 없이 바빠지니까 그것마저 힘들다는 걸 핑계로 안한 것 같다.
그런데 내가 무얼 배웠는지, 분명 본 오류인데 해결하지 못할 때마다 회의감이 들었다.
다시 배웠다는 그 마음으로 날 채워보자!

작성 시점은 하루 지난 31일이지만 ... 30일에 배운 거니까 ㅎㅎ


VSCode, Cursor 쓴지 무려 5년이 넘었지만 ...
부끄럽게도 한 번도 Debugger를 써본 적이 없다.

그동안은 pdb로 원하는 라인으로 점프하거나,
만국공통 print로 해결했었다.
이렇게 해왔는데 어떻게 굴러간 것도 지금 생각하면 정말 대단한 듯 ㅎ

그런데 이제 정말 debugger를 쓰지 않으면 이해가 어려울 정도로 복잡한 코드를 보고 있기 때문에 드디어 사용해봤다.


1. ModuleNotFoundError

Debug 사용하는 방법은 인터넷 상에 좋은 자료들이 많기 때문에 ... 생략하겠다.
내가 배운 건 그지같은 ModuleNotFoundError 다.
차라리 ImportErrorpip install로 바로 해결할 수 있는데, ModuleNotFoundError는 경로상 맞지 않아 import가 불가한 에러로 알고 있기 때문에 항상 이 에러가 뜨면 한숨부터 나온다.


2. 원인

bash로 실행할 때, 즉 debug 모드가 아닐 때에는 뜨지 않는 에러가 왜 뜨는가?

디버거 모드 (debugpy via launch.json)에서는 PYTHONPATH나 특정 extension/module path가 누락될 가능성이 큽니다.

디버거 런처 (debugpy)는 기본적으로 현재 working directory만 포함하고 실행되므로, 커스텀 라이브러리가 sys.path에 들어가지 않았을 가능성이 높습니다.

실제로 에러가 뜬 부분이 직접 구현해서 import 한 부분이기 때문에 합당한 원인 추정이라고 생각했다. 실제로 bash와 debug 모드에서의 sys.path를 찍어보면, /home/tmp/.local/lib/python3.10/site-packages 에 해당하는 경로가 debug 모드에서 없다는 것을 확인할 수 있었다. 실제로 나는 따로 virtual env를 사용하지 않고 tmp에 packge를 설치하고 있기 때문에 이와 같은 오류가 뜨는 것이 당연했다.


3. 해결

...
"env": {
    "PYTHONPATH": "/home/tmp/.local/lib/python3.10/site-packages:.",
}
...

위와 같이 launch.jsonenv 변수에 PYTHONPATH를 추가해주었고, 해당 변수에 아까 빠져있던 path를 추가하여 실행하니 정상 작동하였다. 해결하면서 배운 것 중 하나는 colon은 path를 구분하는 구분자 역할을 하고, 저 PYTHONPATH를 해석해보면 site-package가 담긴 path. 즉, 현재 path를 추가한다는 의미이다.

profile
정말 알아?

0개의 댓글