"Conda로 가상환경 만들어서 주피터 커널에 띄워서 JupyterLab 환경에서 프로젝트 진행하시면 돼요"
새로 인턴을 시작한 회사에서 프로젝트를 위해 환경을 세팅하였다. 특히 데이터 탐색에 가장 필수적인 주피터 노트북을 로컬에 깔고 업무를 진행하였는데, 그렇게 진행하면 나중에 고생한다는 충고와 함께 위와 같이 설명해주셨다. 주피터 노트북으로 프로젝트를 꽤 해보았는데 저 정도 설명도 못알아듣는다는게 뭔가 굉장히 현.타가 왔다. 내가 정말 이 둘을 잘 모르고 썼구나라는 생각이 들었다. 그래서 이번 포스팅에서는 아나콘다와 주피터 노트북에 대해서 제대로 정리하는 글을 써보려고 한다.
Anaconda란?
만약 서로 다른 프로젝트인데 각자에게 필요한 라이브러리가 한 공간에 모두 설치되어 있다면 어떨까? 이에 대한 좋은 예시를 찾았는데, 만약 내가 축구부이자 밴드부라고 가정해보자. 그래서 이들과 소통하기 위해 단톡방 하나를 파서 축구부와 밴드부를 모두 초대했다고 하자. 어떤 일이 벌어질까? 아마 아래와 같이 개판 5분전이 되어버릴 것이다.
이를 해결하는 방법은 그냥 단순하게 축구부 단톡방과 밴드부 단톡방을 따로 만드는 것이다. Anaconda가 딱 이 역할을 해준다고 생각하면 된다. 아나콘다는 가상환경을 통해 논리적으로 공간을 분리함으로써 라이브러리들 간의 버전 충돌 문제를 해결해주고 쉽게 환경을 생성하고 삭제할 수 있도록 한다. 단톡방은 가상환경, 단톡방 멤버들은 라이브러리인 것이다.
아나콘다에서 가상환경은 아래의 명령어로 굉장히 쉽게 만들 수 있다.
conda create -n <가상환경이름> python=<버전> # 가상환경 생성
conda activate <가상환경이름> # 가상환경 실행
conda deactivate # 가상환경 종료
JupyterLab과 커널
JupyterLab과 Jupyter Notebook의 차이
많은 개발자들이 개발의 간편함을 위해 Jupyter Notebook(주피터 노트북)을 사용한다. 나 또한 주피터 노트북을 자주 사용해왔는데, 이번에 진행하는 프로젝트에서 JupyterLab(주피터랩)을 사용하는게 좋다고 하셔서 주피터랩을 이용하기 시작했다. 둘 간의 차이가 궁금했는데, 간단하게 설명하면 주피터랩 ⊇ 주피터 노트북이라고 할 수 있지 않을까 싶다. 주피터랩은 주피터 노트북의 후속작이라고 할 수 있는데, 주피터 노트북을 훨씬 더 간편하게 사용할 수 있도록 해준다.
기존에 주피터 노트북에서는 지원하지 않았던 다양한 기능을 지원하는데, 주피터 전용 vscode(?)라고 생각해도 될 거 같다. 여러 탭을 생성할 수도 있고, 터미널을 웹상에서 사용할 수 있거나 화면 분할을 할 수 있는 등 많은 기능을 가지고 있다.
주피터랩까지는 어떻게 이해를 하였다. "아 주피터 노트북을 더 좋게 쓸 수 있는 도구구나!" 그런데 문제는 다음이었다. 그럼 주피터 커널이 뭐지?하는 생각이 들었다.
Jupyter Kernel에 대해 알아보자
커널이란 말은 많이 들어보았다. 특히 운영체제에서 리눅스 커널은 운영체제의 모든 것이라고 배웠기 때문에 그냥 주피터의 코어정도로 알고 있었다. 주피터에서의 커널은 운영체제의 것과 비슷하면서도 다르다. 주피터 커널은 프로그래밍 언어가 실행되는 환경을 말한다. 주피터는 Python 외에도 R이나 Julia와 같은 언어도 지원하는데 이런 프로그래밍 언어가 돌아갈 수 있게끔 하는 환경이다.
아까 가상환경 생성 명령어가 기억난다면 뒤에 파이썬의 버전을 명시하는 것을 보았을 것이다. 여기서 가상환경과 주피터 커널의 개념이 연결된다. 주피터에서는 다중 커널을 통해 여러 독립된 환경에서 프로그래밍을 할 수 있도록 지원한다. 주피터는 다른 가상환경이더라도 같은 커널을 공유하면 결국 같은 환경을 공유하기 때문에 다른 커널을 생성함으로써 각각의 공간에서 다른 프로젝트를 진행할 수 있게 해야한다. 즉, 콘다에서 가상환경을 만들어서 이를 주피터 커널로 등록한다면 독립된 여러 환경을 사용할 수 있다.
아래와 같은 명령어를 통해서 주피터에 생성한 가상환경을 커널로 등록할 수 있다.
python3 -m ipykernel install --user --name <가상환경이름> --display-name <표시하고 싶은 커널 이름>
'개발 > 개발 지식' 카테고리의 다른 글
asyncio 완전 정복 - 1 (0) | 2022.07.23 |
---|---|
파이썬 DB 커넥터(psycopg2) 간단한 사용법/executor과 commit 차이 (0) | 2022.04.06 |
NFS란? 정의/장단점 (0) | 2022.04.04 |
REST vs Websocket - 차이/작동방식/적절한 비유 (1) | 2022.03.29 |
Vagrant 어떤 용도일까? 정의/사용이유/Docker와 비교 (0) | 2022.03.23 |