[Conda-Jupyter] Conda 가상환경과 Jupyter Kernel 연동/생성/삭제
2022.06.17 - [분류 전체보기] - Python 가상 환경 관리 4종 - venv / virtualenv / ipykernel
2022.12.06 - [개발 이야기/Python] - [Jupyter Kernel 추가] conda 가상환경을 jupyter Kernel로 추가하기
2022.09.19 - [개발 이야기/Python] - [주피터노트북 커널] jupyter lab/notebook kernel
2022.06.17 - [분류 전체보기] - Python 가상 환경 관리 4종 - venv / virtualenv / ipykernel
2020.06.04 - [개발 이야기/Python] - [파이썬] Anaconda x Jupyter notebook 설치 및 설정 방법 - 가상환경으로 파이썬 개발환경 구성
2020.03.10 - [IT 이야기] - Python x Jupyter Notebook 설치 및 환경 구성
2022.09.19 - [IT 이야기/IT 상식] - [Python 가상환경] conda 설치 및 가상환경 (feat. 내부 로직 & cheat sheet)
[요약]
- conda 명령어
- 가상환경 생성 : `conda create -n <가상환경 이름> python=<python버전>`. ex) conda create -n env_test python=3.9
- 가상환경 삭제 : `conda env remove --name <가상환경 이름>` ex) conda remove -n env_test
- 가상환경 활성화/비활성화 : `conda activate <가상환경 이름>` / `conda deactivate`
- 가상환경 목록 : `conda env list` or `conda info --envs`
-n 옵션은 `--name` 옵션과 동일합니다.
- jupyter kernel 명령어
- 현상 / 원인파악 : 기본환경에서 jupyter notebook/ jupyterlab kernel과 conda 가상환경은 연동되지 않음.
- Jupyter 커널 목록 확인 : `jupyter kernelspec list`
- conda-Jupyter 연동 패키지 설치 : `conda install nb_conda_kernels`
- 연동 : 1) 가상환경 활성화 , 2) Jupyter 커널 생성, 3) 결과 확인
- 1) 가상환경 활성화 : conda activate <가상환경 이름>
- 2) 커널 생성
- `pip install ipykernel`
- `ipython kernel install --user --name=<가상환경 이름>`
혹은 `python -m ipykernel install --user --name=<가상환경 이름>`
- 3) 결과 확인
- pip list 또는 import <library> 확인
- kernel.json 확인 ( kernel.json은 해당 kernel의 경로에 위치함. 해당 kernel경로는 `jupyter kernelspec list` 명령으로 확인)
- 결과적으로 Jupyter kernel에 대한 설정은, `nb_conda_kernels`은 kernel.json 내용을 conda env list 내용에 맞게 수정하는 것임
- jupyter 커널 삭제 : `jupyter kernelspec uninstall env_test` 또는 `jupyter kernelspec remove env_test`
ipykernel이 없는 경우, `pip install ipykernel` 실행
jupyter의 kernel생성 할 때 기본 설정(nb_conda_kernel이 없는 경우)은 "os 기본 python 환경에서 실행됨"
Conda 가상환경 vs. Jupyter Kernel
conda를 이용해서 가상환경 생성 (아래 명령줄)을 생성해 보자. 그리고, 필요한 라이브러리를 설치해 보자. 아래는 예제로 torch를 설치한다.
$ conda create -n env_test python=3.9
$ conda activate env_test
$ pip install torch
$ conda deactivate
Jupyter Kernel 확인을 위해서 아래와 같이 `jupyter kernelspec list` 를 실행해 보면, 당연하게도 conda에서 추가한 가상환경은 kernel에 등록되어 있지 않다. conda package manager와 Jupyter는 아무런 연관이 없다. (연동같은거 안 해준다.) Google 검색으로 "Jupyter Kernel 추가하기"라고 찾아보자. 아래와 같이 ipykernel을 통해서 커널을 추가하는 내용 결과를 얻을 수 있다. 그러나, 이 명령어는 conda 및 가상환경과는 무관하게 말 그대로 Jupyter Kernel을 생성해 준다. 기본값을 사용하여 환경을 살펴보면, 생성된 Kernel로 실행되는 Python 환경은 OS 기본 Python이거나 (base) 가상환경 이다.
빈번하게 발생하는 실수 중 하나는 conda를 통해서 생성한 가상환경과, Jupyter kernel의 이름이 동일하다고 하여 동일한 가상환경으로 착각하는 것이다. 기본적으로, 이 둘은 단지 표기되는 문자열만 동일할 뿐이다. 이번 포스팅에서는 conda 가상환경 설정과, Jupyter kernel을 살펴보고, Conda 가상환경과 Jupyter의 커널을 동기화하는 것이다.
Jupyter의 Kernel로 코드를 작성....
....
....이 아니라 에러가 난다.
$ conda activate env_test
$ pip list
무엇인가 잘못된것 같다.
무슨일이 일어난 것일까?
우선 conda 가상환경 목록을 먼저 살펴보자. `conda env list` 명령을 통하여 생성되어 있는 가상환경 목록을 나열할 수 있다. 다음으로 Jupyter Kernel 목록을 나열하기 위해 `jupyter kernelspec list`명령어를 사용하자. 각 명령어를 사용하면, 가상환경과 가상환경이 설치된 경로를, Jupyter Kernel 과 Kernel의 설정파일 경로를 확인할 수 있다. 명령을 실행 후 알 수 있듯이, conda 가상환경은 Anaconda 패키지 하위에, jupyter Kernel은 Users home 하위 Jupyter/kernels 하위에 위치해 있다. 두 경로간의 연계성은 전혀 존재하지 않는다.
다음은 conda env와 jupyter kernelspec 을 통해서 각각 가상환경이 설치된 위치를 확인한다.
$ conda env list
# conda environments:
#
# base * /Users/richwind/opt/anaconda3
# env_test /Users/richwind/opt/anaconda3/envs/env_test
$ jupyter kernelspec list
# env_test /Users/richwind/Library/Jupyter/kernels/env_test
# python3 /Users/richwind/Library/Jupyter/kernels/python3
conda 가상환경의 위치와 Jupyter Kernel의 위치가 서로 상이함을 알 수 있다. 즉, conda 가상환경과 이름이 동일한 또다른 Jupyter 가상환경이 생성되었을 뿐을 의미한다. 따라서, 이전 섹션에서 살펴본 봐와 같이 conda에서 설치한 패키지가 Jupyter Notebook의 Kernel에서는 동작하지 않는 것이다. ( 가상환경 이름 : env_test, Kernel name : env_test를 가정)
- conda 가상환경 : /Users/richwind/opt/anaconda3/envs/env_test
- jupyter kernel : /Users/richwind/Library/Jupyter/kernels/env_test
[ Jupyter kernel 목록 보기 ]
$ jupyter kernelspec list
# Available kernels:
# python3 /Users/richwind/Library/Jupyter/kernels/python3
[ Jupyter kernel 추가하기 ]
$ pip install ipykernel
$ python -m ipykernel install --user --name=env_test --display-name=env_test
# Installed kernelspec env_test in /Users/richwind/Library/Jupyter/kernels/env_test
Jupyter 커널 추가후, 다시 커널 목록을 확인하자. env_test 라는 이름의 커널이 추가 되어 있는것을 확인 할 수 있다.
$ jupyter kernelspec list
# Available kernels:
# env_test /Users/richwind/Library/Jupyter/kernels/env_test
# python3 /Users/richwind/Library/Jupyter/kernels/python3
따라서, JupyterLab 혹은 Jupyter Notebook UI에서 이제 "env_test"라는 이름의 커널/가상환경을 선택할 수 있다.
conda 가상환경과 Jupyter Kernel을 연동하고, 패키지 설치/관리는 conda 환경으로 하면 동시에 Jupyter에 반영되도록 하는 방법을 추가 설명한다.
가상환경 연동 Jupyter Kernel 생성 (기존 존재 경우 Overwrite)
기존 conda 환경에서 Jupyter Notebook Kernel을 연결해 주는 패키지 (nb_conda_kernels)를 설치한다.
conda install -c conda-forge nb_conda_kernels
구글검색에 의하면, `pip install nb_conda` 설치도 가능하다고 한다. 필자의 환경에서는 동작하지 않았다.
패키지(nb_conda_kernels)를 설치 후, 가상환경을 활성화(activate)하고, `ipython kernel install`을 통해서 Jupyter Kernel을 생성해 준다. 이 때 `--name=<가상환경 이름>`으로 선택해 주어 conda 가상환경과 Jupyter Kernel을 연결해 준다.
$ conda activate env_test
$ ipython kernel install --user --name=env_test
#Installed kernelspec env_test in /Users/richwind/Library/Jupyter/kernels/env_test
# 위 경우가 안될 경우,
$ conda activate env_test
$ conda install ipykernel
$ python -m ipykernel install --user --name=env_test
#Installed kernelspec env_test in /Users/richwind/Library/Jupyter/kernels/env_test
jupyter kernel 삭제 : `jupyter kernelspec uninstall <커널이름>`. ex) jupyter kernelspec uninstall env_test
다음으로 Jupyter Notebook을 리프레시 or 재시작 해 주자. 다음 처럼 패키지가 설치된 가상환경으로 동작하는지 점검 해 볼 수 있다. 다음 예는 타겟 가상환경에만 `joblib`를 설치한 경우 Jupyter Notebook에서 joblib 설치 여부를 확인하는 경우이다.
%pip list | grep joblib
좀 더 상세하게, 이러한 행위는 결과적으로 Jupyter 커널 설정파일 (kernel.json)의 argv값을 변경해 주는 것이다. kernel.json 파일은 Jupyter 설치 폴더 아래 `kernels/<kernel name>/kernel.json`에 위치한다. 다음은 kernel.json의 내용이다.
$ cat ~/Library/Jupyter/kernels/env_test/kernel.json
{
"argv": [
"/Users/richwind/opt/anaconda3/envs/env_test/bin/python",
"-m",
"ipykernel_launcher",
"-f",
"{connection_file}"
],
"display_name": "env_test",
"language": "python",
"metadata": {
"debugger": true
}
}
앞서 거론한 바와 같이, conda 가상환경 파일과, Jupyter Kernel의 경로는 다르게 지정되어 있으므로, jupyter kernel.json에서는 가상환경 아래 python 파일 위치를 지정함으로써 해당 가상환경으로 동작하도록 설정해주는 작업니다.
- 기본적으로, argv의 첫번째 매개변수가 base의 python이다. PATH가 제대로 걸려 있으면, 단순히 "python"이 기본값이다. "display_name"등도 여기에 설정되어 있다. 만약, 이런 저런것이 번거롭다면, `kernel.json`을 수동으로 설정 해 주어도 된다.
- python 가상환경은 결국, 다른 python root directory에 패키지 설치를 다시 한 환경이므로, 가상환경용 python 실행 파일로 실행하면, 가상환경으로 동작할 수 있다.
Linux 환경 등에서 jupyter kernel.json 기본설정은 아래와 같다.
cat /usr/local/share/jupyter/kernels/python3/kernel.json
{
"argv": [
"python",
"-m",
"ipykernel_launcher",
"-f",
"{connection_file}"
],
"display_name": "Python 3 (ipykernel)",
"language": "python",
"metadata": {
"debugger": true
}
2022.06.17 - [분류 전체보기] - Python 가상 환경 관리 4종 - venv / virtualenv / ipykernel
2022.12.06 - [개발 이야기/Python] - [Jupyter Kernel 추가] conda 가상환경을 jupyter Kernel로 추가하기
2022.09.19 - [개발 이야기/Python] - [주피터노트북 커널] jupyter lab/notebook kernel
2022.06.17 - [분류 전체보기] - Python 가상 환경 관리 4종 - venv / virtualenv / ipykernel
2020.06.04 - [개발 이야기/Python] - [파이썬] Anaconda x Jupyter notebook 설치 및 설정 방법 - 가상환경으로 파이썬 개발환경 구성
2020.03.10 - [IT 이야기] - Python x Jupyter Notebook 설치 및 환경 구성
2022.09.19 - [IT 이야기/IT 상식] - [Python 가상환경] conda 설치 및 가상환경 (feat. 내부 로직 & cheat sheet)