- Conda 가상환경 'sg_hrnet_py37'을 생성
- 주로
VSCode
상에서 작업하다가Jupyter
환경에서 작업할 일이 생겨서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"