마루옵스서버 · 네트워크 · AI 기술 노트

소개문의

[Python 개발 환경 03] conda·Miniforge 사용법: 분석 환경과 Jupyter 커널

키보드와 선글라스가 놓인 작업 공간

참고 사진 · 키보드와 선글라스가 놓인 작업 공간 · 사진: Ramiro Mendes thisisramiro / 원본 / CC0 · 목록용 크기 조정

pandas가 필요하다는 이유만으로 conda를 반드시 써야 하는 것은 아닙니다. 요즘은 pip의 바이너리 wheel로 설치되는 패키지도 많아요. conda를 고를 이유가 분명해지는 때는 Python뿐 아니라 여러 네이티브 라이브러리의 조합을 함께 관리하고 싶을 때입니다.

Python 개발 환경 · 01 선택과 venv · 02 uv · 03 conda · 04 웹 개발 · 05 데이터·AI · 06 OCR·서비스 분리

이 글의 목차

conda·Miniforge·채널을 구분한다

이름역할
conda환경과 패키지를 관리하는 도구
Miniforgeconda-forge를 기본으로 사용하는 설치 배포판. 이 글에서 설치할 진입점
conda-forge커뮤니티가 패키지를 빌드·배포하는 채널
환경선택한 Python·라이브러리·실행 파일이 설치된 독립 prefix

conda라는 도구와 특정 배포판·서비스의 이용 조건은 같은 개념이 아닙니다. 조직에서 사용할 때는 선택한 배포판과 채널·패키지의 이용 조건도 확인합니다. 이 글은 공식 Miniforge 저장소에서 배포하는 Linux 설치 파일과 conda-forge 채널을 사용합니다.

1. 아키텍처에 맞는 설치 파일과 체크섬을 받는다

아래는 x86_64 Linux용이며 Ubuntu와 Rocky에 공통으로 적용하는 예시입니다. 2026년 10월 18일 확인한 Miniforge 릴리스는 26.7.2-0입니다. ARM 서버에서는 해당 릴리스의 aarch64 파일을 선택해야 해요. 파일 이름을 바꿀 때 체크섬 파일 이름도 함께 바꿉니다.

uname -m
curl -fLO https://github.com/conda-forge/miniforge/releases/download/26.7.2-0/Miniforge3-26.7.2-0-Linux-x86_64.sh
curl -fLO https://github.com/conda-forge/miniforge/releases/download/26.7.2-0/Miniforge3-26.7.2-0-Linux-x86_64.sh.sha256
sha256sum -c Miniforge3-26.7.2-0-Linux-x86_64.sh.sha256
bash Miniforge3-26.7.2-0-Linux-x86_64.sh -b -p "$HOME/miniforge3"
"$HOME/miniforge3/bin/conda" --version

체크섬이 맞는지 확인한 다음 설치합니다. 이미 ~/miniforge3를 사용하고 있다면 그 디렉터리에 새 설치를 덮지 않습니다. 이 글의 검증은 별도 작업 디렉터리에 설치한 Miniforge에서 수행했습니다.

2. 셸을 초기화하고 base 자동 진입을 끈다

"$HOME/miniforge3/bin/conda" init bash
# 새 터미널을 열거나 셸 설정을 다시 읽은 뒤
conda config --set auto_activate_base false
conda config --set channel_priority strict
conda --version

이 예제는 Bash 기준입니다. 이미 열린 셸에서는 새 초기화 설정이 반영되지 않을 수 있어요. base는 conda 자체를 유지하는 환경으로 두고, 프로젝트 라이브러리는 별도 환경에 설치합니다. conda를 활성화한 상태에서 venv를 또 활성화하기보다, 어떤 환경을 사용할지 하나씩 확인하는 편이 덜 헷갈립니다.

3. environment.yml로 프로젝트 환경을 만든다

프로젝트 루트에 다음 environment.yml을 저장합니다. nodefaults는 다른 기본 채널이 암묵적으로 추가되는 일을 피하기 위한 선언입니다.

name: data-lab
channels:
  - conda-forge
  - nodefaults
dependencies:
  - python=3.12
  - pandas
  - numpy
  - ipykernel
  - pip
conda env create -f environment.yml
conda activate data-lab
python -c 'import sys, pandas; print(sys.executable); print(pandas.__version__)'
conda list
conda info --envs

환경은 프로젝트 디렉터리의 .venv 대신 Miniforge 아래 envs 경로 등에 만들어질 수 있습니다. 따라서 명세 파일이 있는 폴더와 실제 환경 경로가 같다고 가정하지 않습니다. conda info --envs와 sys.executable이 기준입니다. conda 환경 관리 문서를 함께 참고하세요.

기존 환경의 선언을 바꿨다면 아래처럼 갱신할 수 있습니다. --prune은 필요 없어진 conda 의존성을 제거할 수 있으므로 변경 내용을 확인한 복제 환경이나 복원 가능한 개발 환경에서 먼저 적용합니다. pip로 설치한 것까지 완전하게 정리된다고 기대하지는 않습니다.

conda env update -n data-lab -f environment.yml --prune

4. YAML 명세와 정확한 환경 기록을 따로 보관한다

conda env export -n data-lab --from-history > environment.history.yml
conda env export -n data-lab --no-builds > environment.snapshot.yml
conda list -n data-lab --explicit > conda-linux-64.explicit.txt
기록다시 만들 때의 의미
직접 작성한 environment.yml선택한 패키지와 Python 계열의 의도. 다시 해석하면 버전이 달라질 수 있음
–from-history사용자가 요청한 conda 패키지 중심. pip 요구사항과 플랫폼 차이는 별도 확인
–no-builds 스냅샷선택된 패키지 버전을 더 자세히 남기지만 모든 플랫폼의 재현을 보장하지 않음
–explicit구체적인 패키지 아티팩트 URL 기록. 주로 같은 플랫폼·아키텍처의 복원에 사용

export 파일에 현재 PC의 prefix:가 들어갔다면 저장소에 넣기 전에 경로를 확인하고, 다른 PC에 강제할 절대 경로가 아니라면 제거합니다. explicit 파일은 conda 아티팩트의 기록이며 pip가 설치한 패키지 목록까지 같은 방식으로 잠그는 것은 아닙니다. 혼용 환경은 두 설치 영역을 모두 기록해야 합니다. 최신 conda에는 conda export 명령도 있지만, 명세와 잠금의 구분은 같습니다.

# 동일 플랫폼의 별도 환경에서 explicit 복원 확인
conda create -n data-lab-rebuild --file conda-linux-64.explicit.txt
conda run -n data-lab-rebuild python -c 'import pandas; print(pandas.__version__)'

5. pip가 꼭 필요한 패키지는 마지막에 설치한다

원하는 패키지가 선택한 conda 채널에 없거나 필요한 버전을 구하기 어렵다면 pip가 필요할 수 있습니다. 먼저 conda 의존성을 설치하고, 활성화한 프로젝트 환경의 python -m pip로 pip 전용 항목을 설치합니다. 그 뒤 conda 패키지를 반복해서 바꾸기보다 명세를 고쳐 새 환경을 재구성하는 편이 충돌을 추적하기 쉽습니다.

YAML에는 pip: 하위 목록으로 pip 전용 패키지와 버전 조건을 기록할 수 있습니다. 같은 numpy·OpenCV 등을 conda와 pip 양쪽에서 중복 관리하지 않도록 설치 소유자를 정합니다. pip check는 Python 패키지 메타데이터의 충돌을 찾는 도구이며, 모든 네이티브 ABI 호환성까지 검증하는 것은 아닙니다.

conda run -n data-lab python -m pip check

6. Jupyter 커널을 환경과 맞춘다

conda run -n data-lab python -m ipykernel install --user \
  --name data-lab --display-name "Python (data-lab)"

Jupyter 화면이 열렸다고 그 노트북이 data-lab의 Python을 쓰는 것은 아닙니다. 커널 메뉴에서 Python (data-lab)을 선택한 다음 셀에서 import sys; print(sys.executable)을 확인합니다. 커널 등록은 실행할 Python 경로를 Jupyter에 알려 주는 절차입니다. IPython 커널 설치 문서가 이 구성을 설명합니다.

서버도 이 환경에서 띄우려면 다음처럼 JupyterLab을 추가합니다. 개인 실습에서는 loopback에 바인딩하고, 원격 접속은 SSH 터널로 전달합니다. 인증 토큰을 없애는 옵션은 사용하지 않습니다.

conda install -n data-lab --override-channels -c conda-forge jupyterlab
conda run -n data-lab jupyter lab --no-browser --ip=127.0.0.1 --port=8888

PC에서 ssh -N -L 18888:127.0.0.1:8888 labadmin@서버주소를 열고, 서버가 안내한 토큰을 사용해 PC의 http://127.0.0.1:18888로 접속할 수 있습니다. 여기서 Jupyter 설치가 추가되었으므로 필요한 환경 명세·스냅샷도 다시 기록해야 합니다.

분석 환경에 맞지만 모든 프로젝트의 기본값은 아니다

conda는 데이터 분석과 네이티브 패키지 조합에 유용한 선택지입니다. 대신 채널·빌드·환경 용량을 관리해야 하고, 환경 YAML을 저장했다는 것만으로 정확한 복원이 끝나지는 않습니다. 일반적인 웹 서비스는 다음 04 웹 개발처럼 uv와 독립된 패키지 구조로 시작해도 충분한 경우가 많습니다.

연재 예제 파일 내려받기 · venv·conda 명세와 uv·웹·데이터·OCR 예제 소스, 확인한 uv 잠금 파일을 묶었습니다. 각 프로젝트 디렉터리에서 실행하며 OS 패키지는 본문의 절차로 별도 준비합니다.

댓글

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

닉네임·이메일·댓글 내용·IP 주소·브라우저 정보는 댓글 게시 및 관리에 사용됩니다. 이메일과 접속 정보는 공개 댓글에 표시하지 않습니다. 개인정보 요청은 운영자 이메일로 보내 주세요. 개인정보처리방침