앞으로 (거의 무조건) 평일에는 TIL을 작성해볼까 한다.
학부생 때 동아리 하면서는 한 번씩 했는데,
정말 눈코 뜰새 없이 바빠지니까 그것마저 힘들다는 걸 핑계로 안한 것 같다.
그런데 내가 무얼 배웠는지, 분명 본 오류인데 해결하지 못할 때마다 회의감이 들었다.
다시 배웠다는 그 마음으로 날 채워보자!
작성 시점은 하루 지난 31일이지만 ... 30일에 배운 거니까 ㅎㅎ
VSCode, Cursor 쓴지 무려 5년이 넘었지만 ...
부끄럽게도 한 번도 Debugger를 써본 적이 없다.
그동안은 pdb로 원하는 라인으로 점프하거나,
만국공통 print로 해결했었다.
이렇게 해왔는데 어떻게 굴러간 것도 지금 생각하면 정말 대단한 듯 ㅎ
그런데 이제 정말 debugger를 쓰지 않으면 이해가 어려울 정도로 복잡한 코드를 보고 있기 때문에 드디어 사용해봤다.
Debug 사용하는 방법은 인터넷 상에 좋은 자료들이 많기 때문에 ... 생략하겠다.
내가 배운 건 그지같은 ModuleNotFoundError
다.
차라리 ImportError
면 pip install
로 바로 해결할 수 있는데, ModuleNotFoundError
는 경로상 맞지 않아 import가 불가한 에러로 알고 있기 때문에 항상 이 에러가 뜨면 한숨부터 나온다.
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를 설치하고 있기 때문에 이와 같은 오류가 뜨는 것이 당연했다.
...
"env": {
"PYTHONPATH": "/home/tmp/.local/lib/python3.10/site-packages:.",
}
...
위와 같이 launch.json
의 env
변수에 PYTHONPATH
를 추가해주었고, 해당 변수에 아까 빠져있던 path를 추가하여 실행하니 정상 작동하였다. 해결하면서 배운 것 중 하나는 colon은 path를 구분하는 구분자 역할을 하고, 저 PYTHONPATH
를 해석해보면 site-package가 담긴 path
와 .
즉, 현재 path
를 추가한다는 의미이다.