Python

[Python] 가상환경과 Kernel의 차이와 역할 (Conda, Jupyter Notebook, Kernel)

Sorrynthx 2024. 11. 29. 09:28

1. Kernel의 역할

    Kernel은 Jupyter Notebook이 Python 코드를 실행할 수 있도록 도와주는 "실행 엔진"입니다.
    Kernel은 Jupyter Notebook에서 코드를 실행하고, 그 결과를 사용자에게 반환합니다.

 

    즉, Jupyter에서 작성한 코드를 Python 또는 다른 언어로 해석하고, 실행하는 역할을 합니다.
    Kernel은 특정 Python 환경의 모든 라이브러리와 모듈을 사용할 수 있도록 연결하는 역할도 합니다. 

 

예를 들어, numpy나 pandas를 사용하고 싶다면, 그 라이브러리들이 설치된 환경에 해당하는 Kernel을 사용해야 합니다.

 


2. 가상환경과 Kernel의 관계

    가상환경(Virtual Environment)는 특정 프로젝트에 필요한 Python 버전과 패키지들을 독립적으로 관리할 수 있도록 해주는 환경입니다.
    가상환경을 이용하면 각 프로젝트마다 서로 다른 패키지 버전 및 종속성을 유지할 수 있기 때문에, 라이브러리 간의 충돌을 방지하고 유지보수를 용이하게 합니다.

 


3. 가상환경과 Kernel의 연결

   가상환경과 Kernel을 1:1로 매칭해서 사용하는 것은 각 프로젝트의 독립성을 보장하고 충돌을 방지하는 좋은 방법입니다. 각 가상환경에 맞게 Kernel을 등록하면, Jupyter Notebook에서 해당 프로젝트에 필요한 정확한 환경을 선택하여 사용할 수 있기 때문입니다.


        예를 들어, 프로젝트 A와 프로젝트 B가 서로 다른 Python 라이브러리를 사용한다고 가정하면, 두 프로젝트 각각에 대한 가상환경을 만들고 해당 가상환경으로 Kernel을 만들어 Jupyter Notebook에서 실행할 수 있습니다.
        이렇게 하면 Jupyter Notebook에서 Notebook마다 서로 다른 가상환경을 사용할 수 있으며, 프로젝트별로 서로 다른 라이브러리를 독립적으로 관리할 수 있습니다.

 


4. Jupyter에서 Kernel 생성 및 사용 예시

    가상환경을 생성한 후, 그 환경을 Jupyter의 Kernel로 등록하면, Jupyter Notebook을 열 때 해당 가상환경을 선택하여 사용할 수 있습니다. 이렇게 하면 Jupyter에서 코드 실행 시, 해당 가상환경에 설치된 모든 라이브러리와 설정을 사용할 수 있습니다.

    예를 들어:

# 명령을 사용해 가상환경을 생성합니다.
# 이 환경을 활성화하고 필요한 라이브러리들을 설치합니다.
conda create --name myenv python=3.9 

#그 후, 이 환경을 Jupyter의 Kernel로 등록합니다:
python -m ipykernel install --user --name=myenv --display-name "My Environment Kernel"

 

이제 Jupyter Notebook을 열면 "My Environment Kernel"이라는 이름으로 등록된 Kernel을 선택할 수 있게 되고, 이를 통해 myenv 가상환경에서 작업을 수행할 수 있습니다.

 


5. 가상환경과 Kernel을 1:1로 매칭할 때의 장점

    독립성: 각 Notebook마다 별도의 Python 환경을 설정함으로써, 특정 프로젝트에서 사용되는 패키지 버전이 다른 프로젝트에 영향을 미치지 않습니다.
    유지보수 용이: 프로젝트에 맞는 정확한 패키지와 설정을 유지할 수 있어, 프로젝트를 업데이트하거나 이전 버전으로 되돌려야 할 때 매우 편리합니다.
    명확성: Jupyter에서 Notebook을 열 때 어떤 환경을 사용하는지 명확하게 Kernel을 통해 알 수 있습니다. "My Environment Kernel"처럼 명확한 이름을 지으면 관리하기 더 쉽습니다.

 


6. 예시: 같은 가상환경, 다른 Kernel들

예를 들어, testenv라는 가상환경이 있고 이 환경에 Kernel A와 Kernel B가 연결되어 있으며, 

분석 작업에는 Kernel A를, 

영상 처리 작업에는 Kernel B를 

사용하는 경우를 생각해보겠습니다.

 

- 6.1 공통된 기반

    testenv 가상환경은 Kernel A와 Kernel B가 공유하는 기본 Python 환경입니다. 이 말은 두 Kernel 모두 testenv에 설치된 패키지를 사용할 수 있다는 뜻입니다.

- 6.2 각 Kernel의 차이점 (커스터마이징)

    Kernel A에는 분석 작업에 필요한 라이브러리(예: pandas, numpy, scipy)가 추가적으로 설치되어 있을 수 있고,
    Kernel B에는 영상 처리 관련 라이브러리(예: opencv, scikit-image)가 추가적으로 설치되어 있을 수 있습니다.
    같은 가상환경에서 두 개의 Kernel을 만들었지만, 두 Kernel에서 다른 라이브러리를 사용하거나, 필요에 따라 특정 라이브러리를 더 설치할 수 있습니다.

7. Jupyter에서의 사용 방식

    Jupyter Notebook에서는 Notebook 파일마다 서로 다른 Kernel을 선택할 수 있습니다.
    분석용 작업을 하는 경우에는 Kernel A를 선택하고, 영상 처리 작업을 할 때는 Kernel B를 선택하여 사용합니다.
    각 Kernel에는 해당 작업에 필요한 패키지와 설정이 되어 있기 때문에, Jupyter Notebook에서 작업을 시작할 때 별도의 설정 변경 없이 각 작업에 필요한 최적의 환경을 사용할 수 있습니다.

8. 가상환경과 Kernel의 차이 정리

    가상환경 (testenv):
        Python 버전 및 패키지를 관리하는 독립적인 환경입니다.
        Kernel의 기반이 되는 환경이며, 여기에 설치된 패키지는 가상환경에서 실행되는 모든 Kernel에서 기본적으로 사용 가능합니다.

    Kernel (A, B):
        Jupyter Notebook과 연동되어 코드 실행을 담당합니다.
        같은 가상환경을 기반으로 만들었더라도, 추가적인 패키지나 설정을 다르게 할 수 있습니다.
        목적에 따라 커스터마이징된 Python 실행 엔진이라고 할 수 있습니다.

결론

가상환경에 설치된 패키지는 해당 가상환경을 사용하는 모든 Kernel에서 기본적으로 접근할 수 있습니다. 그러나 각 Kernel은 동일한 가상환경을 기반으로 하더라도, 추가적인 설치와 설정에 따라 다른 기능을 제공할 수 있습니다.

이렇게 하면 Jupyter에서 Notebook을 열 때 어떤 Kernel을 선택하는가에 따라, 필요한 추가 라이브러리나 특화된 설정에 쉽게 접근할 수 있어, 같은 가상환경을 공유하더라도 작업의 특성에 맞게 환경을 최적화하여 사용할 수 있습니다.