
이 글에서 다루는 내용
Python 프로젝트를 몇 개만 동시에 진행해도 "이 라이브러리 버전이 다른 프로젝트랑 충돌난다"는 상황을 반드시 만나게 됩니다. 이 글에서는 Python 가상환경이 왜 필요한지, 대표 도구인 venv와 conda(Anaconda/Miniconda)의 차이, 그리고 실무에서 바로 쓰는 명령어까지 한 번에 정리합니다. 처음 Python을 다루는 분부터, 이미 pip install은 쓰지만 conda와 venv의 차이가 헷갈리는 분까지 이 글 하나로 정리가 되도록 구성했습니다.
1. Python 가상환경이란 무엇인가
1-1. 가상환경이 필요한 이유
시스템 Python에 그대로 pip install을 하면 모든 프로젝트가 같은 패키지, 같은 버전을 공유하게 됩니다. 프로젝트 A는 Django 3.2, 프로젝트 B는 Django 4.2가 필요하다면 한쪽이 반드시 깨집니다.
가상환경은 프로젝트별로 격리된 Python 실행 공간을 만들어 이 문제를 해결합니다. 초기에 시스템 Python에 패키지를 마구 설치했다가, 한 프로젝트의 의존성 업그레이드 때문에 다른 프로젝트가 실행조차 되지 않는 상황을 겪으면 그 뒤로는 모든 프로젝트에 가상환경을 먼저 만드는 것이 습관이 됩니다.
venv vs conda — 관리 범위의 차이 venv (Python 기본) Python 패키지 격리 시스템 Python 사용 가볍고 빠름 · 표준 내장 conda (Anaconda/Miniconda) Python 패키지 격리 Python 버전 + 비파이썬 라이브러리 무거움 · 데이터 사이언스에 강함💡 실무에서는 "글로벌 Python에는 어떤 패키지도 설치하지 않는다"는 원칙을 지키는 것이 가장 안전합니다.
1-2. 가상환경이 해결하는 문제
- 프로젝트별 의존성 격리
- 패키지 버전 충돌 방지
- 개발 / 배포 환경의 재현 가능성 확보
- 시스템 Python 오염 방지
2. 주요 가상환경 도구 비교
Python 세계에는 가상환경 도구가 여러 개 있습니다. 이름이 비슷해 보여도 목적과 쓰임새가 조금씩 다릅니다.
| 도구 | 언어 범위 | Python 버전 전환 | 기본 포함 여부 | 주요 용도 |
|---|---|---|---|---|
venv |
Python 전용 | 불가 | Python 3.3+ 기본 포함 | 가장 가벼운 표준 도구 |
virtualenv |
Python 전용 | 불가 | 별도 설치 필요 | venv 상위 호환, 구버전 Python 지원 |
conda |
다언어 (C, R 등) | 가능 | Anaconda/Miniconda에 포함 | 과학 계산, 데이터 분석, ML |
pyenv + venv |
Python 전용 | 가능 | 별도 설치 필요 | 여러 Python 버전 병행 운영 |
ℹ️ 웹 개발·스크립팅 중심이면
venv, 머신러닝·데이터사이언스 중심이면conda를 기본 선택으로 두는 것이 일반적입니다.
3. venv 사용법 (Python 기본 도구)
3-1. 환경 생성과 활성화
# 가상환경 생성 (디렉토리 이름은 관례적으로 .venv)
python -m venv .venv
# 활성화 (Linux / macOS / WSL)
source .venv/bin/activate
# 활성화 (Windows PowerShell)
.venv\Scripts\Activate.ps1
# 비활성화
deactivate
활성화가 되면 프롬프트 앞에 (.venv)가 붙어 현재 어떤 환경인지 한눈에 확인할 수 있습니다.
예상 출력 보기
$ python -m venv .venv
$ source .venv/bin/activate
(.venv) $ which python
/home/user/project/.venv/bin/python
(.venv) $ python --version
Python 3.12.1
(.venv) $ pip list
Package Version
---------- -------
pip 24.0
setuptools 69.0.3
3-2. 패키지 설치 및 의존성 관리
# 패키지 설치
pip install requests pandas
# 현재 환경의 패키지 목록을 고정 파일로 저장
pip freeze > requirements.txt
# 다른 곳에서 동일 환경 재현
pip install -r requirements.txt
⚠️
pip freeze는 의존성의 의존성까지 모두 기록합니다. 진짜로 "내가 선택한" 패키지만 남기고 싶다면pip-tools의pip-compile을 쓰거나, 수동으로requirements.in같은 상위 파일을 따로 관리하는 방식을 고려해볼 만합니다.
4. Anaconda와 Miniconda
4-1. Anaconda vs Miniconda
conda는 두 가지 배포판으로 제공됩니다. 어떤 걸 설치해야 하는지 처음에는 헷갈릴 수 있습니다.
| 항목 | Anaconda | Miniconda |
|---|---|---|
| 설치 용량 | 약 3GB 이상 | 약 400MB |
| 기본 패키지 | 과학 계산 250+ 패키지 사전 설치 | conda와 Python 최소 구성만 |
| 추천 대상 | 입문자, 일반적인 분석 툴이 한 번에 필요한 분 | 실무자, 필요한 것만 골라 쓰고 싶은 분 |
💡 실무에서는 Miniconda + 필요한 패키지만 설치하는 방식이 디스크 공간과 유지보수 측면에서 훨씬 유리합니다. 특히 서버·CI 환경에서는 거의 항상 Miniconda를 씁니다.
4-2. Miniconda 설치 (Linux / WSL)
# 설치 스크립트 다운로드
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
# 설치 실행
bash Miniconda3-latest-Linux-x86_64.sh
# 쉘 재시작 혹은 설정 다시 로드
source ~/.bashrc
# 설치 확인
conda --version
⚠️ 설치 후에는 터미널을 재시작해야
conda명령을 인식합니다. 재시작이 번거로우면source ~/.bashrc(또는~/.zshrc)로 쉘 설정을 다시 불러옵니다.
4-3. base 자동 활성화 끄기
기본 설정 그대로 두면 모든 쉘에서 base 환경이 자동 활성화됩니다. 이 동작이 다른 도구(pyenv, 시스템 Python 등)와 충돌하는 경우가 많아서, 실무에서는 대부분 꺼 둡니다.
conda config --set auto_activate_base false
5. conda 명령어 완벽 정리
5-1. 환경 관리
# 새 환경 생성 (Python 버전을 반드시 명시)
conda create -n myenv python=3.12
# 환경 목록 확인
conda env list
# 환경 활성화 / 비활성화
conda activate myenv
conda deactivate
# 환경 삭제
conda remove -n myenv --all
5-2. 패키지 관리
# 설치
conda install numpy pandas
# 특정 버전 설치
conda install numpy=1.26.0
# conda-forge 채널에서 설치 (최신 패키지가 많음)
conda install -c conda-forge polars
# 설치된 패키지 목록
conda list
# 패키지 제거
conda remove numpy
ℹ️
conda와pip를 한 환경에서 섞어 쓰면 의존성이 꼬이기 쉽습니다. "conda로 설치 가능한 것은 conda로, 안 되는 것만 pip로"라는 원칙을 지키면 대부분의 문제를 피할 수 있습니다.
5-3. 환경 내보내기 / 공유
팀 협업이나 서버 배포 시에는 환경을 파일로 내보내 공유해야 합니다.
# 현재 환경을 YAML로 저장
conda env export > environment.yml
# YAML로부터 환경 재현
conda env create -f environment.yml
# 플랫폼 독립적으로 내보내기 (권장)
conda env export --from-history > environment.yml
--from-history 옵션이 중요합니다. 이 옵션 없이 내보내면 현재 OS/아키텍처에서만 동작하는 빌드 해시까지 기록되어, macOS에서 내보낸 파일이 Linux에서 설치되지 않는 상황이 발생합니다.
environment.yml 예시 보기
name: myenv
channels:
- conda-forge
- defaults
dependencies:
- python=3.12
- numpy
- pandas
- jupyterlab
- pip
- pip:
- fastapi
- uvicorn
- httpx
6. 실무 운영 팁
6-1. 프로젝트 루트에 환경 두기
팀 협업에서는 프로젝트 디렉토리 안에 .venv를 두고, .gitignore에 포함시키는 방식이 가장 무난합니다. IDE 연동, 경로 추적, 이식성 모두 유리합니다.
# .gitignore
.venv/
env/
__pycache__/
*.pyc
6-2. VS Code 연동
VS Code는 프로젝트 내 .venv를 자동으로 감지합니다. 인식되지 않는다면 명령 팔레트(Cmd/Ctrl + Shift + P) → "Python: Select Interpreter"에서 원하는 인터프리터를 직접 선택하면 됩니다. conda 환경도 같은 방식으로 선택할 수 있습니다.
6-3. 언제 venv, 언제 conda
- venv — Django / Flask / FastAPI 웹 개발, 일반 스크립트, CLI 도구 개발.
- conda — NumPy, SciPy, PyTorch, TensorFlow 등 C/Fortran 바인딩이 많은 과학 계산·ML 워크로드.
- 두 개 혼용해도 됨 — 프로젝트별로 필요에 따라 도구를 다르게 써도 전혀 문제없습니다.
트러블슈팅
문제 1: conda: command not found
설치 후 쉘 초기화가 제대로 되지 않은 경우입니다.
# 임시 해결
source ~/miniconda3/etc/profile.d/conda.sh
# 영구 적용 (쉘 설정 파일에 init 코드 추가)
~/miniconda3/bin/conda init bash
# zsh를 쓴다면
~/miniconda3/bin/conda init zsh
문제 2: venv 활성화가 안 됨 (Windows PowerShell)
PowerShell의 기본 실행 정책이 스크립트 실행을 막고 있기 때문입니다.
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
문제 3: pip / conda 혼용으로 의존성 충돌
conda가 관리하는 패키지를 pip가 덮어쓰면서 메타데이터가 깨진 상태입니다. 해결 순서는 다음과 같습니다.
- 환경을 새로 만들고,
conda install을 먼저 모두 끝낸 뒤,pip install은 마지막에 한 번에 처리. - 이미 심하게 꼬였다면
conda env remove -n myenv후 재생성하는 것이 가장 빠릅니다.
문제 4: 디스크 공간 부족 (패키지 캐시가 거대해짐)
# 사용하지 않는 패키지, 캐시, tarball 정리
conda clean --all
conda 캐시는 사용하다 보면 수 GB까지 쌓이는 경우가 흔합니다. 주기적으로 정리해 주는 것이 좋습니다.
문제 5: SSL 관련 오류로 패키지 설치 실패
사내망·프록시 환경에서 인증서 검증이 실패하는 경우입니다.
# conda 채널 SSL 검증 임시 해제 (반드시 신뢰 가능한 네트워크에서만)
conda config --set ssl_verify false
# pip의 경우 신뢰 호스트 지정
pip install --trusted-host pypi.org --trusted-host files.pythonhosted.org <패키지명>
⚠️ SSL 검증을 끄는 것은 보안 위험이 따릅니다. 가능하면 사내 인증서를 시스템에 정식으로 등록하는 방식을 우선 고려합니다.
마무리
Python 가상환경의 핵심은 단 하나, "프로젝트별로 격리된 실행 공간을 유지한다"는 원칙입니다. 단순 개발은 venv, 데이터 분석·머신러닝은 conda를 기본 선택으로 두고, 필요에 따라 도구를 조합하면 대부분의 상황을 커버할 수 있습니다. 다음 글에서는 uv, poetry, pipenv 등 현대적인 Python 패키지 매니저를 비교하고 어떤 선택이 합리적인지 정리해 보겠습니다.
- 공식 문서: Python venv
- 공식 문서: Conda
- 공식 문서: Miniconda 다운로드
- 공식 문서: conda-forge 채널
'개발환경 & 도구' 카테고리의 다른 글
| Docker 설치부터 컨테이너 실행까지 (1) | 2026.04.26 |
|---|---|
| Git 초보 탈출 — 실무에서 쓰는 명령어 정리 (1) | 2026.04.22 |
| VS Code 개발 환경 최적화 세팅 (2) | 2026.04.19 |
| Python 가상환경(venv) 완벽 정리 (0) | 2026.04.19 |
| WSL2 설치와 Ubuntu 초기 세팅 가이드 (0) | 2026.04.18 |