FoO의 개발 블로그

[Jupyter extension] Jupyter 확장프로그램 개발 환경 구축 본문

Programming/Python

[Jupyter extension] Jupyter 확장프로그램 개발 환경 구축

FoO__511 2024. 9. 2. 15:21

공식 문서를 따라 환경을 구축 해보자.

 

Conda 설치 및 가상환경 활성화

Conda 설치파일 레포지토리에서 설치 파일을 다운로드 한다.

내 환경은 우분투 22.04이기 때문에 최신 리눅스 버전을 curl로 땡겨왔다.

curl --output anaconda.sh https://repo.anaconda.com/archive/Anaconda3-2024.06-1-Linux-x86_64.sh

 

sha256sum로 파일 해시를 따서 다운로드 페이지에서 제공하는 해시와 비교해 검증할 수 있다.

sha256sum anaconda.sh

 

해시가 일치한다면 무사히 파일이 다운로드 된 것이고 다운로드 된 sh 파일을 실행시키면 conda 설치가 시작된다.

설치가 끝난 뒤에 conda init을 하면 필요한 설정이 ~/.bashrc 에 저장된다.

bash anaconda.sh
echo "export PATH=~/anaconda3/bin:~/anaconda3/condabin:$PATH" >> ~/.bashrc
source ~/.bashrc
conda init

 

초기화까지 끝난 뒤에 jupyter에서 제공하는 튜토리얼을 따라가면 된다. 가상환경을 만들고 활성화를 해보자.

conda create -n jupyterlab-ext --override-channels --strict-channel-priority -c conda-forge -c nodefaults jupyterlab=4 nodejs=20 git copier=9 jinja2-time
  • -n [env_name] : n은 name을 줄인 것으로 --name으로 사용할 수 있다. 여기서는 jupyterlab-ext가 가상환경 이름이다.
  • --override-channels : 기본 혹은 .condarc의 채널의 찾지 않는다. 이 옵션을 사용하면 -c(--channel)옵션이 필수적이다.
  • -c [channel] : c는 channel을 줄인 것으로 --channel으로 사용할 수 있다. 패키지를 찾을 추가적인 채널을 정의한다. 
  • --strict-channel-priority : 동일한 이름의 패키지가 있을 경우, 채널의 우선순위가 높은 쪽의 패키지가 채택된다.  

그 외 conda create 옵션들.

 

환경을 생성하면서 설정한 채널과 패키지들을 설치해야 되므로 환경생성에 시간이 걸린다.

생성이 끝나면 아래 명령어로 가상환경을 활성화 할 수 있다. 활성화하면 터미널의 입력부 앞에 (env_name)이 생긴다.

conda init
source ~/.bashrc
conda activate jupyterlab-ext

 

conda deactivate로 가상환경을 비활성화 할 수 있다.

 

Jupyterlab extension 환경구축

원하는 확장프로그램의 이름으로 디렉터리를 만들고 안에서 copier으로 깃 레포를 복사해오자. 튜토리얼에서 제시하는 깃 명령어들은 생략하겠다.

 

mkdir my_extension
cd my_extension/
copier copy --trust https://github.com/jupyterlab/extension-template .

 

레포를 끌어온 뒤에 pip으로 필요한 패키지를 다운로드 한다. 두번째 명령어는 jupyter를 실행할 때 이 위치를 참고해 확장프로그램을 사용하도록 symlink를 생성해준다.

pip install -ve .
jupyter labextension develop --overwrite .

 

이제 jupyter를 실행시키면 해당 경로의 확장프로그램이 설치된 채로 실행된다.

jupyter lab  --no-browser --port=8888 --ip=0.0.0.0
  • 원격 서버에서 작업하고 있기 때문에 위 옵션을 줘야 외부에서 접속할 수 있다.

서버 확장 프로그램

지금까지 프론트엔드 확장프로그램 환경을 구축 하였다. 이 확장은 클라이언트 측, 즉 브라우저에서 jupyter notebook이나 lab이 어떻게 작동할지 작성한 것이다. 클라이언트 측에서 얻을 수 있는 jupyter 환경의 정보가 부족할 경우 server 확장 프로그램을 작성할 수 있다. 

 

서버 확장 프로그램 환경을 구축하는 기본적인 과정은 매뉴얼에 자세하게 정리되어 있다. 클라이언트 측에서 사용할 새로운 api를 뚫으려면 서버 확장 프로그램을 작성하여야 하며, jupyter에서는 tornado라는 라이브러리를 사용한다. 

 

from jupyter_server.base.handlers import JupyterHandler
from jupyter_server.extension.handler import ExtensionHandlerMixin
import tornado


class MyExtensionHandler(ExtensionHandlerMixin, JupyterHandler):
    @tornado.web.authenticated
    def get(self):
        ...

    @tornado.web.authenticated
    def post(self):
        ...

 

위 코드는 매뉴얼 페이지에서 제시하는 예시 코드이다. ExtensionHandlerMixin, JupyterHandler 등의 클래스를 상속받아 jupyter에서 제공하는 인터페이스를 활용할 수 있다. 

 

jupyter 서버 확장 프로그램 개발에 제공되는 클래스의 인터페이스는 공식 문서(API Handler 등)에 정리되어 있다. 여러 코드를 활용하며 잘 모르는 클래스의 경우 위 페이지에 검색하여 인터페이스를 찾아 작업하거나, jupyter community에 있는 질문글을 참조하여 트러블 슈팅하면 된다.

 

하지만 자료가 많지 않아서 그런지(FE 개발은 자료천국이라 굳이 비교하자면 자료가 별로 없는 느낌) 그렇게 해도 이상하게 독스랑 다른것 같다거나.. 뭔가 열심히 찾아보지만 야매 같다는 느낌을 지울 수 없다...

 

서버 확장 프로그램 개발시 참고할만한 레포

- jupyter_server_terminal

- jupyer-kernel-usage (커널 정보 읽어 소켓통신)

 

 

'Programming > Python' 카테고리의 다른 글

[OpenCV] 채널 별 배열 구조 + 이미지 투명화  (1) 2023.10.17