이야기에 앞서
VSC에서 코드를 주로 작성하는데 프로젝트마다 다른 conda 가상 환경을 사용하는 것을 선호한다. EDA를 하는 경우에는 jupyter notebook 환경에서 하는 게 편한데, VSC에서도 extension만 설치한다면 jupyter를 무리없이 사용할 수 있다. 다만 가상환경을 분리하는만큼 주피터 커널 또한 가상환경의 커널을 사용해야 하는데 이런 부분에서 종종 문제가 발생했다. (커널을 생성해줬는데 주피터에서는 인식하지 못하는 경우 등)
이 부분을 해결한 과정을 간단히 적어보고자 한다.
실행 환경
- Ubuntu 20.04 (WSL)
- VSCode
- python 3.9.7
- conda 4.11.0
VSCode 내 관련 extension 설치
python과 jupyter 관련 extension을 설치했다.
- jupyter
- jupyter keymap
- pylance
- python
- python extension pack
- python for vscode
conda 가상 환경 생성
conda는 미리 설치했다고 가정한다. conda의 경우 개인적으로 miniconda를 설치하는 것을 선호한다. 다음과 같이 conda 가상 환경을 만들 수 있다.
conda create -n [가상환경 이름] python=[원하는 파이썬 버전 i.e. 3.9]
jupyter에 해당 가상 환경의 kernel 추가해주기
생성한 가상환경으로 접속한 후에 jupyter와 ipykernel을 설치해준다. 이후 가상환경에 kernel을 추가해주면 된다.
conda activate [가상환경 이름]
pip install jupyter
pip install ipykernel
python -m ipykernel install --user --name [가상환경 이름] --display-name "[jupyter에 표시될 kernel의 이름]"
다만, 이렇게 한다고 노트북 파일의 커널 선택에 바로 생성한 커널이 활성화되지는 않는다. 추가 작업을 해주어야 한다.
원래대로라면 그냥 select interpreter 내의 커널 리스트에서 추가한 커널이 보여야하지만 그 부분이 되지 않았기에 아래와 같은 작업을 수행해주었다. 따라서 커널 목록에서 바로 선택이 가능하다면 아래의 작업은 수행할 필요가 없다.
가상환경의 jupyter server 실행
가상환경 디렉토리 폴더로 이동한 후, jupyter server를 실행시킨다. 가상환경 디렉토리 폴더는 conda env list를 통해 알 수 있다.
cd [가상환경 디렉토리]
jupyter notebook
jupyter server에 연결
ctrl+shift+p를 누르고 jupyter를 입력하면, specify local or remote jupyter server for connections를 클릭한 후 existing을 눌러 주피터 노트북의 접속 주소를 copy and paste해주면 된다.
위의 작업까지 진행을 한다면, vscode를 reload하겠냐는 메세지가 뜨고 reload를 해주면 해당 노트북 파일은 지정한 가상환경의 kernel을 interpreter로 작업을 수행한다.
정리
ipynb 파일을 만들어 eda를 수행할 때 항상 가상환경 커널을 사용할 수 없어 애를 먹었다. 이를 해결해본 김에 포스트로 정리해둔다. 비슷한 문제를 겪는 사람들이 있다면 이 글을 참고하여 해결을 했으면 좋겠다.