Conda와 Jupyter Notebook으로 Python 데이터 분석 환경 구성하기

Alchemist·4일 전

KT AIVLE

목록 보기
2/20

Python으로 데이터 분석이나 머신러닝을 시작할 때 가장 먼저 부딪히는 문제 중 하나가 개발 환경 구성이다.

같은 Python 코드를 작성해도 설치된 패키지 버전이 다르거나, Jupyter Notebook이 다른 Python 환경을 바라보고 있으면 예상하지 못한 오류가 발생할 수 있다. 그래서 프로젝트마다 독립된 가상환경을 만들고, 그 환경에서 필요한 패키지만 관리하는 습관이 중요하다.

이번 글에서는 다음 내용을 중심으로 정리한다.

  • Anaconda와 Jupyter Notebook의 역할
  • Conda 가상환경이 필요한 이유
  • 가상환경 생성, 확인, 활성화, 비활성화
  • Jupyter Notebook에 Conda 환경 연결하기
  • 패키지 설치와 ModuleNotFoundError 해결
  • 환경 복제와 공유를 위한 기본 명령어

Anaconda는 무엇인가?

Anaconda는 Python을 활용한 데이터 분석, 과학 계산, 머신러닝 작업에 필요한 여러 도구를 편리하게 사용할 수 있도록 구성한 Python 배포판이다.

일반적으로 Python만 설치하면 필요한 라이브러리를 직접 하나씩 설치해야 한다.

예를 들어 데이터 분석을 시작하려면 다음과 같은 패키지를 자주 사용한다.

  • pandas
  • numpy
  • scipy
  • matplotlib
  • scikit-learn
  • jupyter

Anaconda는 이런 데이터 분석 도구와 함께 Conda 패키지 및 환경 관리자를 제공한다.

즉, Anaconda의 핵심 장점은 단순히 패키지가 많이 들어 있다는 점보다는 Python 버전과 패키지를 환경별로 관리하기 쉽다는 데 있다.


Jupyter Notebook은 무엇인가?

Jupyter Notebook은 웹 브라우저에서 코드를 셀 단위로 작성하고 실행할 수 있는 개발 환경이다.

일반적인 Python 파일은 전체 프로그램을 한 번에 실행하는 경우가 많지만, Notebook에서는 필요한 코드만 조금씩 실행하면서 결과를 바로 확인할 수 있다.

예를 들어 다음처럼 데이터프레임을 생성한 뒤 바로 결과를 볼 수 있다.

import pandas as pd

users = pd.DataFrame({
    "user_id": [101, 102, 103],
    "visit_count": [5, 2, 8]
})

users

데이터 분석에서는 보통 다음과 같은 흐름으로 작업한다.

데이터 불러오기
    ↓
일부 데이터 확인
    ↓
전처리
    ↓
통계 계산
    ↓
시각화
    ↓
다시 코드 수정

이처럼 코드를 조금씩 실행하면서 중간 결과를 확인해야 하는 작업에서 Notebook이 특히 편리하다.


왜 가상환경을 사용해야 할까?

Python 프로젝트를 계속 만들다 보면 프로젝트마다 필요한 라이브러리와 버전이 달라진다.

예를 들어 다음 두 프로젝트가 있다고 하자.

프로젝트 A
- Python 3.11
- pandas 2.x
- scikit-learn 최신 버전

프로젝트 B
- Python 3.9
- pandas 구버전
- 특정 버전의 TensorFlow

모든 패키지를 하나의 Python 환경에 설치하면 패키지 업데이트 과정에서 서로 충돌할 수 있다.

가상환경을 사용하면 다음처럼 프로젝트 환경을 분리할 수 있다.

Base Python
├── analytics-env
│   ├── pandas
│   ├── scipy
│   └── matplotlib
│
└── ml-env
    ├── numpy
    ├── scikit-learn
    └── pytorch

각 환경은 서로 독립적이기 때문에 한 프로젝트에서 패키지 버전을 변경해도 다른 프로젝트에 영향을 덜 준다.

가상환경을 사용하는 핵심 이유는 크게 두 가지다.

목적설명
호환성 관리프로젝트별 Python 및 라이브러리 버전을 분리할 수 있다.
재현성 확보다른 PC에서도 비슷한 환경을 다시 구성하기 쉬워진다.

프론트엔드 개발에서 프로젝트마다 node_modules와 의존성 버전을 따로 관리하는 것과 비슷하게 생각하면 이해하기 쉽다.


Conda 가상환경 만들기

1. 새로운 환경 생성

Conda에서는 conda create 명령어로 새로운 환경을 만든다.

예를 들어 data-env라는 이름의 Python 3.11 환경을 만들고 싶다면 다음과 같이 실행한다.

conda create -n data-env python=3.11

여기서 주요 옵션은 다음과 같다.

  • conda create: 새로운 Conda 환경 생성
  • -n data-env: 환경 이름을 data-env로 지정
  • python=3.11: 해당 환경에서 사용할 Python 버전 지정

설치 과정에서 패키지 목록이 표시되고 진행 여부를 묻는다면 내용을 확인한 뒤 설치를 진행하면 된다.


2. 생성된 환경 확인

현재 PC에 만들어진 Conda 환경은 다음 명령어로 확인할 수 있다.

conda info --envs

또는 다음 명령어도 사용할 수 있다.

conda env list

실행 결과는 대략 다음과 같은 형태다.

base        *   .../anaconda3
data-env        .../anaconda3/envs/data-env

* 표시는 현재 활성화된 환경을 의미한다.

실습에서도 base 환경과 별도로 만든 가상환경들이 정상적으로 목록에 표시되는 것을 확인할 수 있었다.


3. 가상환경 활성화

생성한 환경을 사용하려면 활성화해야 한다.

conda activate data-env

활성화에 성공하면 터미널 앞부분의 환경 표시가 바뀐다.

(data-env) >

이 상태에서 실행하는 python, pip, conda install 등의 명령은 기본적으로 해당 환경을 기준으로 동작한다.


4. 가상환경 비활성화

현재 환경에서 빠져나오려면 다음 명령어를 사용한다.

conda deactivate

가상환경에서 base로 돌아왔다면 프롬프트가 다시 다음처럼 바뀐다.

(base) >

Jupyter Notebook을 가상환경에 연결하기

가상환경을 만들었다고 해서 Jupyter Notebook이 자동으로 그 환경을 사용하는 것은 아니다.

Notebook에는 Kernel이라는 개념이 있다.

Kernel은 실제 Python 코드를 실행하는 프로세스이고, Notebook 화면에서 선택한 Kernel이 어느 Python 환경을 사용하느냐에 따라 사용할 수 있는 패키지가 달라진다.

즉 다음 관계를 기억하면 된다.

Jupyter Notebook 화면
        ↓
선택한 Kernel
        ↓
특정 Conda 가상환경의 Python
        ↓
해당 환경에 설치된 패키지

1. 가상환경 활성화

먼저 사용할 환경을 활성화한다.

conda activate data-env

2. Jupyter Notebook 설치

해당 환경에 Jupyter Notebook이 없다면 설치한다.

conda install jupyter notebook

설치 후에는 해당 환경에서 Notebook을 실행할 수 있다.

jupyter notebook

그러면 일반적으로 브라우저가 열리면서 로컬 Jupyter 화면이 표시된다.


3. ipykernel 설치

가상환경을 Jupyter의 Kernel 목록에 등록하려면 ipykernel이 필요하다.

conda install ipykernel

4. 가상환경을 Kernel로 등록

다음 명령어를 실행한다.

python -m ipykernel install --user --name data-env --display-name "Python (data-env)"

각 옵션의 의미는 다음과 같다.

  • python -m ipykernel install: 현재 Python 환경을 Jupyter Kernel로 등록
  • --user: 현재 사용자 계정에 Kernel 등록
  • --name data-env: 내부적으로 사용할 Kernel 이름
  • --display-name: Jupyter 화면에 표시할 이름

등록이 끝나면 Notebook에서 Kernel을 선택할 때 Python (data-env) 같은 항목을 사용할 수 있다.


패키지가 설치되어 있는데 import가 안 되는 이유

Jupyter Notebook을 사용하다 보면 다음과 같은 오류를 만날 수 있다.

import scipy
ModuleNotFoundError: No module named 'scipy'

이 오류는 현재 Notebook의 Python 환경에서 scipy 패키지를 찾지 못했다는 뜻이다.

단순하게 보면 두 가지 가능성이 있다.

1. 현재 환경에 scipy가 설치되지 않음
2. scipy는 다른 환경에 설치되어 있는데 Jupyter가 다른 Kernel을 사용 중

실습에서도 pandas는 정상적으로 import되었지만 scipy에서 ModuleNotFoundError가 발생했다.

따라서 패키지 오류를 해결할 때는 단순히 "설치했는가?"만 보지 말고 어느 환경에 설치했는가?를 함께 확인해야 한다.


ModuleNotFoundError 해결하기

방법 1. 현재 Conda 환경에 패키지 설치

먼저 터미널에서 올바른 환경이 활성화되어 있는지 확인한다.

conda activate data-env

그다음 필요한 패키지를 설치한다.

conda install scipy

설치가 완료된 뒤 Notebook에서 다시 실행한다.

import scipy

오류 없이 실행된다면 정상적으로 패키지를 불러온 것이다.

실습에서도 누락된 패키지를 설치한 뒤 다시 import했을 때 이전의 ModuleNotFoundError가 더 이상 나타나지 않는 것을 확인할 수 있었다.


방법 2. 현재 Notebook이 어떤 Python을 사용하는지 확인

가장 헷갈리기 쉬운 문제는 터미널 환경과 Jupyter Kernel이 서로 다른 경우다.

Notebook에서 다음 코드를 실행하면 현재 Python 실행 파일의 위치를 확인할 수 있다.

import sys

print(sys.executable)

출력 경로가 사용하려는 Conda 환경 안의 Python인지 확인하면 된다.

예를 들어 Windows라면 다음과 비슷한 구조가 될 수 있다.

...\anaconda3\envs\data-env\python.exe

반대로 base 환경의 Python 경로가 표시된다면 Notebook의 Kernel을 잘못 선택했을 가능성이 높다.


방법 3. 현재 환경의 패키지 확인

Conda 환경에 설치된 패키지는 다음 명령어로 확인할 수 있다.

conda list

특정 패키지만 확인하고 싶다면 운영체제에 따라 검색 명령을 함께 사용할 수도 있다.

Windows CMD

conda list | findstr scipy

macOS / Linux

conda list | grep scipy

패키지가 목록에 없다면 현재 환경에는 설치되지 않은 것이다.


conda install과 pip install은 어떻게 구분할까?

Conda 환경에서도 pip를 사용할 수 있지만 가능하면 설치 순서를 신경 쓰는 것이 좋다.

일반적으로 Conda에서 제공되는 패키지는 먼저 다음처럼 설치하는 편이 관리하기 쉽다.

conda install pandas scipy matplotlib

Conda 채널에 없거나 PyPI에서만 제공되는 패키지가 필요하면 그때 pip를 사용할 수 있다.

pip install some-package

중요한 것은 반드시 사용할 가상환경을 먼저 활성화한 뒤 설치하는 것이다.

conda activate data-env
pip install some-package

그렇지 않으면 패키지가 의도하지 않은 Python 환경에 설치될 수 있다.


Conda 환경을 복제하는 방법

실험용으로 기존 환경을 복사하고 싶을 때는 --clone 옵션을 사용할 수 있다.

conda create -n data-env-copy --clone data-env

이 방식은 다음과 같은 상황에서 유용하다.

현재 환경은 잘 동작함
        ↓
새 패키지 또는 버전을 테스트하고 싶음
        ↓
기존 환경은 유지
        ↓
복제 환경에서 변경 사항 테스트

실제 작업 환경을 바로 수정하는 것보다 안전하게 테스트할 수 있다.

복제된 환경도 다음 명령어로 확인할 수 있다.

conda info --envs

필요 없는 환경 삭제하기

더 이상 사용하지 않는 환경은 삭제할 수 있다.

conda env remove -n data-env-copy

삭제 후에는 다시 환경 목록을 확인한다.

conda info --envs

목록에서 제거되었다면 정상적으로 삭제된 것이다.


환경을 파일로 저장하고 다시 만들기

가상환경의 가장 큰 장점 중 하나는 환경 구성을 파일로 남길 수 있다는 것이다.

현재 환경을 YAML 파일로 저장하려면 다음처럼 실행한다.

conda env export > environment.yml

그러면 Python 버전과 설치된 패키지 정보가 environment.yml에 기록된다.

다른 PC에서는 이 파일을 사용해 환경을 다시 만들 수 있다.

conda env create -f environment.yml

이 방식은 팀 프로젝트나 여러 PC에서 동일한 분석 환경을 유지해야 할 때 특히 유용하다.

다만 conda env export 결과에는 운영체제별 의존성이나 빌드 정보까지 포함될 수 있으므로, 장기간 공유할 환경이라면 파일 내용을 한 번 확인하는 것이 좋다.


자주 사용하는 Conda 명령어

실제로 자주 쓰는 명령어만 다시 정리하면 다음과 같다.

목적명령어
환경 생성conda create -n data-env python=3.11
환경 목록 확인conda info --envs
환경 활성화conda activate data-env
환경 비활성화conda deactivate
패키지 설치conda install pandas
설치 패키지 확인conda list
환경 복제conda create -n data-env-copy --clone data-env
환경 삭제conda env remove -n data-env-copy
환경 내보내기conda env export > environment.yml
환경 파일로 생성conda env create -f environment.yml
Jupyter 실행jupyter notebook

설치 과정에서 경고가 나온다면?

Conda를 사용하다 보면 설치나 환경 생성이 정상적으로 끝났더라도 경고 메시지가 출력될 수 있다.

예를 들어 새로운 패키지 설치 방식이나 기능을 안내하는 메시지는 오류가 아니라 정보성 경고일 수 있다.

이때 중요한 것은 다음 두 가지를 구분하는 것이다.

WARNING
→ 작업은 완료되었지만 확인할 내용이 있음

ERROR
→ 명령 실행 자체가 실패했을 가능성이 높음

환경 생성 후 다음 명령어에서 새 환경이 정상적으로 보인다면 우선 생성은 성공한 것이다.

conda info --envs

터미널 메시지를 볼 때는 모든 경고를 오류로 생각하기보다 명령의 최종 결과와 환경 상태를 함께 확인하는 습관이 중요하다.


실습할 때 가장 헷갈렸던 포인트

가상환경을 처음 사용하면 "분명 패키지를 설치했는데 왜 Notebook에서는 안 되지?"라는 상황을 자주 만나게 된다.

이 문제는 대부분 다음 세 가지를 순서대로 확인하면 해결할 수 있다.

현재 터미널의 Conda 환경 확인
        ↓
패키지가 그 환경에 설치되어 있는지 확인
        ↓
Jupyter Notebook의 Kernel이 같은 환경인지 확인

즉, 패키지 문제처럼 보여도 실제 원인은 환경 연결 문제일 수 있다.

개발자 관점에서는 다음처럼 이해할 수 있다.

프로젝트 코드
    ↓
실행 환경
    ↓
설치된 의존성

코드 자체가 같아도 실행 환경이 다르면 결과가 달라질 수 있다. Python 데이터 분석에서도 결국 의존성과 실행 환경을 함께 관리하는 것이 중요하다.


핵심 정리

  • Anaconda는 Python 데이터 분석 환경과 Conda를 함께 제공하는 배포판이다.
  • Jupyter Notebook은 코드를 셀 단위로 실행하면서 결과를 바로 확인하기 좋은 도구다.
  • Conda 가상환경을 사용하면 프로젝트별 Python과 패키지 버전을 독립적으로 관리할 수 있다.
  • conda create -n 환경명 python=버전으로 환경을 생성할 수 있다.
  • conda info --envs에서 환경 목록과 현재 활성화된 환경을 확인할 수 있다.
  • Jupyter에서 Conda 환경을 사용하려면 ipykernel 등록과 Kernel 선택까지 확인해야 한다.
  • ModuleNotFoundError가 발생하면 패키지 설치 여부뿐 아니라 현재 Kernel이 어떤 Python 환경을 사용하는지 확인해야 한다.
  • environment.yml을 활용하면 다른 PC에서도 비슷한 Conda 환경을 재구성할 수 있다.

정리하며

Python 데이터 분석 환경을 구성할 때 중요한 것은 단순히 Anaconda나 Jupyter를 설치하는 것보다 현재 어떤 Python 환경을 사용하고 있는지 명확하게 이해하는 것이다.

가상환경을 사용하면 패키지 충돌을 줄일 수 있고, 프로젝트별 의존성을 관리하기도 쉬워진다. 특히 Jupyter Notebook까지 함께 사용할 때는 터미널의 Conda 환경과 Notebook의 Kernel이 같은 환경을 바라보고 있는지 확인하는 습관이 중요하다.

처음에는 환경 생성, 활성화, Kernel 등록이 번거롭게 느껴질 수 있지만 이후 데이터 분석이나 머신러닝 프로젝트를 여러 개 진행하다 보면 가상환경 관리가 오히려 문제를 줄여주는 기본 도구라는 것을 알 수 있다.

profile
html_programming_language

0개의 댓글