less than 1 minute read

ImportError

예전에 상대 경로로 파이썬 모듈을 임포트 했더니 오류가 발생한 경험이 있었다.

ImportError: attempted relative import with no known parent package

원인

에러에서 나와있듯이 파이썬이 parent package를 알 수 없으므로 발생한 문제였다.

해결방법

파이썬에게 상위 패키지를 알려주어야 하는데 그 방법은 -m 인자를 주어 실행시키는 것이다. 이것은 해당 파이썬 파일을 모듈로서 실행한다는 의미이다. 참고로 이 명령어를 쓰기 위해선 당연히 해당 모듈을 설치한 상태여야 한다.

실행하고 싶은 모듈 이름이 module이고 그 상위 모듈이 parent이라면 python3 -m parent.module와 같이 실행하면 된다.

vscode로 개발 시

vscode 환경에서는 파이썬 모듈을 실행/디버그 할 때 명령어를 칠 필요 없이 버튼만 누르면 알아서 실행 명령어를 vscode내부 터미널로 전달해준다. 하지만 기본적으로 vscode가 실행해주는 명령어는 파이썬 모듈이 아닌 파일을 실행해 주는 명령이므로 이것을 수정할 필요가 있다.

디버그/실행 설정은 .vscode/launch.json 파일에서 담당한다. 이 파일을 만들기 위해선 vscode 왼쪽 메뉴바의 run 탭(벌레와 삼각형이 그려진 아이콘)을 클릭하고 ‘create a launch.json file’을 클릭한다. 그리고 실행환경을 Module로 선택하면 .vscode 폴더에 launch.json 파일이 만들어진다.

launch.json 의 "module" 값을 (상위 모듈의 이름이 parent 일 때) "parent.${fileBasenameNoExtension}" 으로 바꾼다.

// launch.json
{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Python: Module",
      "type": "python",
      "request": "launch",
      "module": "parent.${fileBasenameNoExtension}"
    }
  ]
}

이와 같이 변경하면 vscode로 디버깅할 때 모듈로 실행할 수 있게 된다.

Comments