[Jupyter]에서 import package 할 때 "ModuleNotFoundError"가 발생하는 경우

Zino·2022년 1월 26일
0

문제상황은 이러했다.

  • Conda 가상환경 'sg_hrnet_py37'을 생성
  • 주로 VSCode 상에서 작업하다가
  • Jupyter 환경에서 작업할 일이 생겨서 \to Jupyter 에 해당 가상환경 커널을 추가 함
    "python -m ipykernel install --user --name sg_hrnet_py37 "
  • VSCode에서 잘 import 되던 패키지가 Jupyter에서 ModuleNotFoundError 를 발생시킴

이렇게 말이다.

혹시나 싶어 터미널에서 패키지 설치 상태를 확인해보았는데,

(base) $ conda activate sg_hrnet_py37

(sg_hrnet_py37) $ pip list | grep -e torch 
  torch                         1.10.1
  torchaudio                    0.10.1
  torchvision                   0.11.2

(sg_hrnet_py37) $ pip list | grep -e opencv 
  opencv-python                 4.2.0.32

이렇게 터미널에서는 잘 확인되는 상황이었다.


이와 같은, 문제상황이라면,

  • 터미널에서는 설치된 패키지가 확인이 되는데
  • Jupyter 또는 VSCode에서 "패키지 찾을 수 없음" ModuleNotFoundError 이 뜨는 경우

이렇게 먼저 확인해보자, (: 참조한 페이지는 -> 참조 페이지 1 )

위 코드를 Jupyter, VSCode에서 (Base), (sg_hrnet_py37)에서 모두 해보았을 때,

# Jupyter 또는 VSCode 환경에서 수행, (=> Terminal에서(X))
>>> import sys 
>>> print(sys.executable)

/home/user/anaconda3/bin/python                       # 결과1) (base)-VSCode에서 결과 
/home/user/anaconda3/envs/sg_hrnet_py37/bin/python    # 결과2) (sg_hrnet_py37)-VSCode에서 결과 
/home/user/anaconda3/bin/python                       # 결과3) (sg_hrnet_py37)-Jupyter에서 결과 

위의 상황을 보면, 결과2)과 결과3)이 같아야 하는데 서로 다른 경로를 출력한 것을 볼 수 있다.

이런 경우라면, '어떤 알 수 없는 이유' (라고 밖에 찾아지지 않는데, 아마도 'conda activate 활성시킬_가상환경 을 깜빡하고 (base) 상태에서 커널 추가를 한 문제)로 Jupyter에서 해당 가상환경-커널을 불러올(connecting) 때, 참조하는 경로 config가 잘 못 세팅되면서, 패키지 import 시에 계속 다른 경로를 참조하는 것이 문제의 원인인 듯 하다.

이렇게 해결해보자.

(: 참조한 페이지는 -> 참조 페이지 2 )

문제가 되는 '참조 경로'를 바로 잡아주기 위해 ipykernel이 참조하는 파일을 확인해보아야 한다.
해당 파일은 /home/user/.local/share/jupyter/kernels/문제가_된_가상환경이름/kernel.json 이와 같은 경로에 있을 것이다.

해당 파일을 열어보면, 아래와 같은 json이 확인된다.

{
 "argv": [
  //"/home/user/anaconda3/bin/python", // <- 문제가 된, 기존 상태를,  
  "/home/user/anaconda3/envs/문제가_된_가상환경이름/bin/python", // <- 이렇게 수정. 
  "-m",
  "ipykernel_launcher",
  "-f",
  "{connection_file}"
 ],
 "language": "python",
 "metadata": {
  "debugger": true
 }
}

위 가장 첫 번째, 'argv' 에서 '해당 가상환경이 설치된 디렉토리'를 바라보지 않고, base 경로 혹은 엉뚱한 python 경로가 적혀있다면, 이 부분만 위와같이 원래 바라봐야 할 가상환경 python 경로로 고쳐주면 된다.

kernel.json 파일을 수정한 후에는, Jupyter를 재시동(하라고 참조 페이지에서는 조언해주는데, 필자의 경우 서버에서 공유하는 Jupyter 였던터라 껐다 켤 수 없어서 단순히 브라우저 새로고침만 했는데, 다행이 적용됐다.) 하면 되겠다.

  • 이렇게 해결됐다.

도움이 되시기를!


  • 참조 페이지

참조 페이지 1) Developers.DE-"Python Visual Studio Code Jupyper ModuleNotFound"

참조 페이지 2) StackOverflow-"sys.path and sys.executable is incorrect in jupyter, but no applied fix is working"

profile
Quick-start보단 Manual을 좋아하는 Data Scientist, Zino입니다 :)

0개의 댓글