본문 바로가기
서버구축 (WEB,DB)

Jupyter Notebook 격리된 Python 가상(venv) 환경에서 실행

by 날으는물고기 2023. 10. 8.

Jupyter Notebook 격리된 Python 가상(venv) 환경에서 실행

Python 가상 환경(Virtual Environment)은 프로젝트 또는 응용 프로그램에 대한 독립적인 Python 환경을 생성하는 데 사용됩니다. 이렇게 하면 프로젝트 간에 패키지 충돌을 피하고 프로젝트마다 다른 버전의 패키지를 사용할 수 있습니다. 가상 환경을 만들면 패키지 설치 및 관리가 간편해지며 프로젝트의 종속성을 격리시킬 수 있습니다.

Python virtualenv, Pyenv, Pipenv

가상 환경 내에서 Python 데몬을 실행하는 방법은 가상 환경 내에서 동일한 방식으로 Python 스크립트를 실행하는 것과 크게 다르지 않습니다.

 

다음은 가상 환경에서 Python 데몬을 실행하는 일반적인 단계입니다.

 

1. 가상 환경 생성: 다음 명령을 사용하여 가상 환경을 생성합니다. myenv 대신 원하는 이름을 사용할 수 있습니다.

python -m venv myenv

 

2. 가상 환경 활성화: 가상 환경을 활성화합니다.

Windows에서 가상 환경 활성화:

myenv\Scripts\activate

macOS 및 Linux에서 가상 환경 활성화:

source myenv/bin/activate

가상 환경을 활성화하면 현재 Python 실행 환경이 가상 환경으로 변경됩니다. 이제 가상 환경에서 pip을 사용하여 패키지를 설치하면, 해당 패키지는 가상 환경에만 설치되며 시스템 전역 Python에는 영향을 주지 않습니다.

 

3. Python 스크립트 작성: Python으로 실행할 스크립트를 작성합니다.

이 스크립트는 데몬 역할을 수행할 코드를 포함해야 합니다.

 

4. Python 데몬 실행: 스크립트를 실행하여 Python 데몬을 시작합니다. 이때 python 명령어를 사용하면 됩니다.

python your_daemon_script.py

your_daemon_script.py는 데몬으로 실행할 Python 스크립트의 파일 이름입니다.

이 스크립트는 가상 환경 내에서 실행됩니다.

 

5. 데몬 실행 중단: 데몬을 중지하려면 해당 스크립트를 실행하는 터미널 창에서 Ctrl + C를 누르거나, 스크립트가 종료되도록 필요한 로직을 구현해야 합니다. 일반적으로 데몬은 백그라운드에서 계속 실행됩니다.

 

가상 환경에서 데몬을 실행하는 주요 아이디어는, 활성화된 가상 환경 내에서 Python을 사용하여 스크립트를 실행하는 것입니다. 그렇게 하면 가상 환경에 설치된 패키지 및 환경 변수가 사용되며, 시스템 전체 Python과 격리됩니다.

 

데몬이 특정 시간 동안 실행되도록 하거나 더 정교한 제어가 필요한 경우, multiprocessing 모듈이나 외부 도구인 systemd (Linux에서) 또는 pm2 (Node.js 기반 데몬 관리자)와 같은 데몬 관리 도구를 사용할 수 있습니다. 이러한 도구를 사용하면 데몬의 시작, 중지 및 관리를 더 쉽게 할 수 있습니다.

 

6. 가상 환경 비활성화: 작업을 마치고 가상 환경을 비활성화하려면 다음 명령을 실행합니다.

deactivate

가상 환경이 비활성화되면 시스템의 기본 Python 환경으로 돌아갑니다.

가상 환경을 사용하면 여러 프로젝트 간에 패키지 충돌을 피하고 프로젝트의 종속성을 철저하게 격리할 수 있으므로 Python 개발에서 매우 유용합니다.

Docker를 사용하여 Jupyter Notebook을 가상 환경 내에서 실행하려면 Dockerfile을 사용하여 Docker 이미지를 빌드하고 컨테이너를 실행해야 합니다. 다음은 Dockerfile을 사용하여 Jupyter Notebook을 가상 환경 내에서 실행하는 예제입니다.

 

Ubuntu 기반 이미지를 사용하고, 가상 환경을 설정하고 Jupyter Notebook을 설치하고 실행하는 단계입니다.

 

  1. 먼저 프로젝트 디렉토리를 생성하고 그 안에 Dockerfile을 만듭니다.
    mkdir my-jupyter
    cd my-jupyter
    touch Dockerfile
  2. Dockerfile을 편집하고 다음과 같이 내용을 작성합니다.
    # Use an official Ubuntu as a parent image
    FROM ubuntu:latest
    
    # Set environment variables
    ENV LANG=C.UTF-8 LC_ALL=C.UTF-8
    ENV PATH=/opt/conda/bin:$PATH
    
    # Install necessary system packages
    RUN apt-get update --yes && \
        apt-get install --yes \
        wget \
        bzip2 \
        ca-certificates \
        libglib2.0-0 \
        libxext6 \
        libsm6 \
        libxrender1 \
        git \
        && apt-get clean --yes
    
    # Install Miniconda3
    RUN wget --quiet https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O /tmp/miniconda.sh && \
        /bin/bash /tmp/miniconda.sh -b -p /opt/conda && \
        rm /tmp/miniconda.sh
    
    # Create a new conda environment
    RUN /opt/conda/bin/conda create --yes --name myenv python=3.8 && \
        /opt/conda/bin/conda clean --yes --all
    
    # Activate the conda environment
    RUN echo "conda activate myenv" >> ~/.bashrc
    
    # Install Jupyter Notebook
    RUN /opt/conda/bin/conda install --yes -c conda-forge jupyter
    
    # Create a working directory
    WORKDIR /workspace
    
    # Expose port for Jupyter Notebook
    EXPOSE 8888
    
    # Start Jupyter Notebook
    CMD ["/opt/conda/bin/jupyter", "notebook", "--ip=0.0.0.0", "--port=8888", "--no-browser", "--allow-root"]
    이 Dockerfile은 다음 작업을 수행합니다.
    • Ubuntu 베이스 이미지를 사용합니다.
    • Miniconda3를 설치하고 가상 환경을 생성합니다.
    • Jupyter Notebook을 설치하고 8888 포트를 노출합니다.
    • Jupyter Notebook을 실행합니다.
  3. Docker 이미지 빌드
    다음 명령을 사용하여 Docker 이미지를 빌드합니다. Dockerfile이 있는 디렉토리에서 실행하십시오.
    docker build -t my-jupyter-image .
  4. Docker 컨테이너 실행
    Docker 이미지를 기반으로 컨테이너를 실행합니다. 8888 포트를 호스트와 연결하여 Jupyter Notebook에 액세스할 수 있도록 합니다.
    docker run -p 8888:8888 my-jupyter-image
  5. 브라우저에서 Jupyter Notebook에 액세스
    Jupyter Notebook이 실행된 후에는 브라우저에서 다음 URL을 엽니다.
    http://localhost:8888
    Jupyter Notebook을 사용할 수 있게 됩니다.

 

이러한 단계를 따르면 Docker 컨테이너 내에서 Jupyter Notebook을 실행할 수 있습니다. 필요에 따라 Dockerfile을 수정하여 사용자 정의 환경을 설정할 수 있습니다.

 

xeus-sqlite 모듈을 포함하여 Jupyter Notebook을 가상 환경 내에서 실행하려면 다음과 같이 Dockerfile을 수정하실 수 있습니다. 아래의 Dockerfile은 Ubuntu 기반 이미지를 사용하며, Miniconda3를 설치하고 Python 가상 환경을 생성한 후 xeus-sqlite와 Jupyter Notebook을 설치합니다.

# Use an official Ubuntu as a parent image
FROM ubuntu:latest

# Set environment variables
ENV LANG=C.UTF-8 LC_ALL=C.UTF-8
ENV PATH=/opt/conda/bin:$PATH

# Install necessary system packages
RUN apt-get update --yes && \
    apt-get install --yes \
    wget \
    bzip2 \
    ca-certificates \
    libglib2.0-0 \
    libxext6 \
    libsm6 \
    libxrender1 \
    git \
    && apt-get clean --yes

# Install Miniconda3
RUN wget --quiet https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O /tmp/miniconda.sh && \
    /bin/bash /tmp/miniconda.sh -b -p /opt/conda && \
    rm /tmp/miniconda.sh

# Create a new conda environment
RUN /opt/conda/bin/conda create --yes --name myenv python=3.8 && \
    /opt/conda/bin/conda clean --yes --all

# Activate the conda environment
RUN echo "conda activate myenv" >> ~/.bashrc

# Install Jupyter Notebook and xeus-sqlite
RUN /opt/conda/bin/conda install --yes -c conda-forge jupyter xeus-sqlite

# Create a working directory
WORKDIR /workspace

# Expose port for Jupyter Notebook
EXPOSE 8888

# Start Jupyter Notebook
CMD ["/opt/conda/bin/jupyter", "notebook", "--ip=0.0.0.0", "--port=8888", "--no-browser", "--allow-root"]

이제 위의 Dockerfile을 사용하여 Docker 이미지를 빌드하고 실행하면 Jupyter Notebook과 xeus-sqlite가 설치된 환경을 사용할 수 있습니다. 위에서 설명한 방법대로 Docker 이미지를 빌드하고 컨테이너를 실행하십시오.

 

아래는 JupyterLite 환경에서 xeus-sqlite 커널을 사용하여 SQLite 데이터베이스를 만들고 관리하는 방법에 대한 자세한 설명입니다. 이 설명은 위의 내용을 순서대로 다시 정리한 것입니다.

 

JupyterLite xeus-sqlite 커널 데모

JupyterLite xeus-sqlite 커널은 JupyterLite 환경에서 사용하기 위해 원래 jupyter-xeus/xeus-sqlite 커널을 포장한 것입니다. 이 커널은 셀 매직을 사용하여 데이터베이스 작업을 수행하고 연결된 데이터베이스에 대한 SQL 코드를 실행하는 데 사용됩니다.

 

데이터베이스 생성

데이터베이스를 생성하기 위해선 라인 매직을 사용합니다. 다음 명령어는 메모리 내 데이터베이스를 생성합니다.

%CREATE example_db.db

그러나 여기서 %CREATE 매직 명령어를 실행하면 "UsageError: Line magic function %CREATE not found." 에러가 발생한다면 xeus-sqlite 설치가 되었는지 확인하셔야 합니다.

 

테이블 생성 및 데이터 삽입

테이블은 SQL을 사용하여 생성하고 데이터를 삽입할 수 있습니다. 아래는 예시입니다.

CREATE TABLE players (Name STRING, Class STRING, Level INTEGER, Hitpoints INTEGER);
INSERT INTO players (Name, Class, Level, Hitpoints) VALUES ("Martin Splitskull", "Warrior", 3, 40);

각각의 코드 셀에서 하나의 명령만 실행할 수 있습니다.

 

테이블 쿼리

SQL 쿼리를 사용하여 테이블을 조회할 수 있습니다. 아래는 몇 가지 예시입니다.

SELECT SUM (Level) FROM players;
SELECT Level, SUM(Hitpoints) AS `Total Hitpoints`
FROM players
GROUP BY Level
ORDER BY `Total Hitpoints` DESC;

 

Vega를 사용한 차트 생성

이 커널은 Vega 차트 컴포넌트도 제공합니다. SQL 쿼리 결과를 Vega 차트로 시각화할 수 있습니다.

%XVEGA_PLOT
    X_FIELD Level
    Y_FIELD Hitpoints
    MARK circle
    WIDTH 100
    HEIGHT 200
    <>
    SELECT Level, Hitpoints FROM players

{
  "$schema": "https://vega.github.io/schema/vega-lite/v4.json",
  "config": {"axis": {"grid": true}},
  "data": {
    "values": [
      {"Hitpoints": "name", "Level": "name"},
      {"Hitpoints": "40", "Level": "3"},
      {"Hitpoints": "20", "Level": "2"},
      {"Hitpoints": "10", "Level": "1"}
    ]
  },
  "encoding": {
    "x": {"field": "Level", "type": "quantitative"},
    "y": {"field": "Hitpoints", "type": "quantitative"}
  },
  "height": 200,
  "mark": {"type": "circle"},
  "width": 100
}

 

데이터베이스 관리

데이터베이스 관리를 위한 여러 라인 매직 명령어도 제공됩니다.

%TABLE_EXISTS players
%TABLE_EXISTS npcs
%GET_INFO
Magic header string: SQLite format 3
Page size bytes: 4096
File format write version: 1
File format read version: 1
Reserved space bytes: 0
Max embedded payload fraction 64
Min embedded payload fraction: 32
Leaf payload fraction: 32
File change counter: 4
Database size pages: 2
First freelist trunk page: 0
Total freelist trunk pages: 0
Schema cookie: 1
Schema format number: 4
Default page cache size bytes: 0
Largest B tree page number: 0
Database text encoding: 1
User version: 0
Incremental vaccum mode: 0
Application ID: 0
Version valid for: 4
SQLite version: 3032003

 

다른 데이터베이스에 연결

새로운 데이터베이스를 생성하면 커널은 해당 데이터베이스 인스턴스에 연결됩니다.

%CREATE potato.db 
CREATE TABLE potaters(production INTEGER)
INSERT INTO potaters (production) VALUES (7)
SELECT * FROM potaters

원래 데이터베이스는 이제 사용할 수 없습니다.

SELECT Name, Level, Hitpoints FROM players;
Error: no such table: players

이러한 방식으로 JupyterLite 환경에서 xeus-sqlite 커널을 사용하여 SQLite 데이터베이스를 생성하고 관리할 수 있습니다.

 

SQLite 데이터베이스 파일을 JupyterLab에서 시각화하고 쿼리를 실행하는 도구 중 하나는 "SQLite Browser" 또는 "DB Browser for SQLite" 입니다. 이 도구를 사용하면 데이터베이스 내용을 검색하고 수정할 수 있습니다.

아래는 SQLite Browser를 설치하고 사용하는 방법입니다.

 

SQLite Browser 설치:
SQLite Browser는 여러 플랫폼에서 사용할 수 있습니다. 여기에서는 macOS, Windows, Linux에 대한 간단한 설치 방법을 안내합니다. 다른 플랫폼에서는 공식 웹사이트에서 다운로드 및 설치 방법을 확인하세요.

 

macOS:
macOS에서는 SQLite Browser를 Homebrew를 사용하여 설치할 수 있습니다. 터미널을 열고 다음 명령을 실행합니다:

brew install --cask db-browser-for-sqlite

Linux(Ubuntu):

Ubuntu 및 파생 상품의 경우 최신 릴리스가 포함된 PPA를 제공합니다.

  • https://launchpad.net/~linuxgndu/+archive/ubuntu/sqlitebrowser

이 ppa를 추가하려면 터미널에 다음 명령을 입력하세요.

sudo add-apt-repository -y ppa:linuxgndu/sqlitebrowser

그런 다음 다음을 사용하여 캐시를 업데이트합니다.

sudo apt-get update

다음을 사용하여 패키지를 설치합니다.

sudo apt-get install sqlitebrowser

Windows 및 기타 OS:
공식 웹사이트에서 SQLite Browser를 다운로드하고 설치하세요. 공식 웹사이트 링크

 

SQLite 데이터베이스 열기:

  • SQLite Browser를 설치한 후 실행합니다.
  • "파일" 메뉴에서 "열기 데이터베이스..."를 선택하고 원하는 SQLite 데이터베이스 파일 (예: "web_data.db")을 선택합니다.

 

데이터 조회 및 수정:

  • SQLite Browser를 사용하여 데이터베이스의 테이블을 검색하고 쿼리를 실행할 수 있습니다. 원하는 작업을 수행하고 데이터베이스 내용을 확인할 수 있습니다.

 

JupyterLab에서 사용:

  • JupyterLab과 SQLite Browser를 병행하여 데이터베이스를 시각화하고 쿼리를 실행할 수 있습니다. JupyterLab에서 SQLite 데이터베이스를 연결하려면 Python 라이브러리인 sqlite3를 사용하여 데이터베이스와 상호 작용할 수 있습니다.

 

데이터베이스를 JupyterLab에서 직접 시각화하거나 쿼리를 실행하는 방법은 SQLite 라이브러리를 사용하여 데이터베이스에 연결하고 원하는 쿼리를 실행하는 것입니다.

 

sqlite_web은 SQLite 데이터베이스를 웹 브라우저를 통해 시각적으로 관리하고 쿼리할 수 있도록 도와주는 간단한 도구 또는 웹 애플리케이션입니다. 이 도구를 사용하면 SQLite 데이터베이스를 더 쉽게 관리하고 데이터를 조회, 수정 및 시각화할 수 있습니다.

sqlite_web을 사용하여 SQLite 데이터베이스를 웹 브라우저에서 확인하려면 다음 단계를 따르세요.

1. sqlite_web 설치
먼저, Python 패키지 관리자인 pip를 사용하여 sqlite_web을 설치합니다.

pip install sqlite-web

2. SQLite 데이터베이스 파일 생성
sqlite_web을 사용하여 데이터베이스를 관리하기 위해 SQLite 데이터베이스 파일을 생성하거나 이미 가지고 있는 데이터베이스 파일을 사용합니다.

3. sqlite_web 실행
다음 명령을 사용하여 sqlite_web을 실행합니다. 데이터베이스 파일의 경로를 지정합니다.

sqlite_web /path/to/your/database.db

예를 들어, 데이터베이스 파일이 현재 작업 디렉토리에 있으면 다음과 같이 실행할 수 있습니다.

sqlite_web your_database.db

4. 웹 브라우저에서 확인
sqlite_web을 실행한 후, 웹 브라우저에서 http://localhost:8080 주소로 접속합니다. 그런 다음, 데이터베이스를 시각적으로 탐색하고 쿼리를 실행할 수 있는 사용자 인터페이스를 볼 수 있습니다.

 

sqlite_web을 사용하면 SQLite 데이터베이스를 쉽게 탐색하고 데이터를 조회하고 수정할 수 있습니다. 이를 통해 데이터베이스를 웹 브라우저에서 시각적으로 관리할 수 있으며, 데이터베이스 구조를 이해하고 쿼리를 실행하는 데 도움이 됩니다.

 

참고. 베이스 이미지를 Miniconda 활용 Dockerfile

# 베이스 이미지 선택 (예: Miniconda)
FROM continuumio/miniconda3

# Conda 환경을 생성합니다
RUN conda create --yes --name jupyter

# 환경을 활성화합니다
SHELL ["conda", "run", "-n", "jupyter", "/bin/bash", "-c"]

# 필요한 패키지 설치 (예: Jupyter Notebook)
RUN conda install jupyter

# 작업 디렉토리 생성
WORKDIR /app

# Jupyter Notebook 실행
CMD ["jupyter", "notebook", "--ip=0.0.0.0", "--allow-root"]
# 베이스 이미지 선택 (예: Miniconda)
FROM continuumio/miniconda3

# Conda 환경을 생성합니다
RUN conda create --yes --name jupyter

# 필요한 패키지 설치 (예: Jupyter Notebook)
RUN conda install -n jupyter jupyter

# 작업 디렉토리 생성
WORKDIR /app

# Conda 환경을 활성화하고 Jupyter Notebook을 실행
CMD ["conda", "run", "-n", "jupyter", "jupyter", "notebook", "--ip=0.0.0.0", "--allow-root"]
728x90

댓글