
머신러닝을 처음 배우기 시작하면 코드보다 먼저 막히는 부분이 개발 환경 설정입니다. “머신러닝 첫 환경설정, conda vs venv vs uv 뭘로 시작할까”라는 질문은 입문자 커뮤니티에서 거의 매주 반복되는데, 세 도구가 해결하는 문제 자체가 다르기 때문에 비교 글을 여러 개 읽어도 결론이 잘 안 나는 경우가 많습니다. 이 글에서는 세 도구가 실제로 무엇을 관리하는지, 어떤 상황에서 어떤 도구가 유리한지를 명령어와 함께 정리하고, 마지막에는 상황별로 바로 따라 할 수 있는 선택 기준을 제시합니다.
세 도구가 관리하는 대상이 근본적으로 다르다
venv는 파이썬 3.3부터 표준 라이브러리에 내장된 가상환경 도구입니다. 이미 설치된 파이썬 인터프리터를 기준으로 격리된 site-packages 폴더를 만들어주는 역할만 하고, 파이썬 버전 자체를 설치하거나 바꿔주지는 않습니다. 즉 “이 프로젝트는 파이썬 3.11이 필요한데 내 컴퓨터엔 3.9만 있다”는 상황은 venv 혼자서는 해결하지 못합니다.
conda는 Anaconda/Miniconda 배포판에서 제공하는 패키지 겸 환경 관리자로, 파이썬 인터프리터 자체와 non-Python 바이너리 의존성까지 함께 관리합니다. 예를 들어 CUDA 런타임 라이브러리처럼 컴파일된 C/C++/Fortran 바이너리가 필요한 numpy, scipy, PyTorch 계열 패키지를 설치할 때 conda-forge 채널을 쓰면 별도의 시스템 라이브러리 설치 없이도 충돌 없는 조합을 받아올 수 있습니다.
uv는 Rust로 작성된 패키지·프로젝트 관리 도구로, 러스트 정적분석 도구 Ruff를 만든 Astral 사에서 개발했습니다. pip, pip-tools, venv, 그리고 pyenv의 파이썬 버전 관리 기능까지 하나의 CLI로 대체하는 것을 목표로 하며, 의존성 해석과 설치 속도가 pip 대비 크게 빠른 것이 특징입니다. 공식 문서는 https://docs.astral.sh/uv/ 에서 확인할 수 있습니다.
실제 명령어로 비교하기
같은 목표, 즉 “파이썬 3.11 환경을 만들고 numpy를 설치한다”를 세 도구로 각각 수행하면 다음과 같습니다.
venv (파이썬이 이미 설치되어 있어야 함):

python -m venv .venv
# Windows
.venv\Scripts\activate
# macOS/Linux
source .venv/bin/activate
pip install numpy
conda:
conda create -n ml python=3.11
conda activate ml
conda install numpy
uv (파이썬 버전 설치까지 자동 처리):
uv python install 3.11
uv venv --python 3.11
uv pip install numpy
# 또는 프로젝트 단위 관리
uv init ml-project
cd ml-project
uv add numpy
여기서 눈여겨볼 부분은 uv python install입니다. venv는 시스템에 파이썬 3.11이 없으면 그대로 실패하지만, uv는 python-build-standalone 프로젝트가 배포하는 독립 실행형 파이썬 빌드를 내려받아 설치까지 한 번에 처리합니다. conda도 conda create -n ml python=3.11 명령으로 파이썬 버전을 지정해 설치할 수 있어 이 점에서는 uv와 비슷하게 동작합니다.
한눈에 보는 비교표
| 항목 | venv | conda | uv |
|---|---|---|---|
| 설치 필요 여부 | 불필요 (파이썬 표준 내장) | Miniconda/Anaconda 별도 설치 | 별도 바이너리 설치 (curl/brew/pip 등) |
| 파이썬 버전 자체 관리 | 불가능 | 가능 | 가능 |
| non-Python 바이너리 의존성(CUDA 등) 관리 | 불가능 (pip 휠에 의존) | 가능 (conda-forge 채널) | 불가능 (pip 휠에 의존) |
| 설치 속도 | pip 기준, 보통 | 의존성 해석이 느린 편 | Rust 기반, 매우 빠름 |
| 의존성 잠금 파일 | 기본 미제공 (pip freeze로 수동) | environment.yml | uv.lock 자동 생성 |
| 생태계 | 표준 pip 패키지 전부 | conda 채널 중심 (PyPI도 가능) | 표준 pip 패키지 전부 |
이 표에서 실무적으로 가장 중요한 줄은 “non-Python 바이너리 의존성” 항목입니다. PyTorch나 TensorFlow의 GPU 버전은 최근에는 pip 휠 자체에 CUDA 런타임이 포함되어 배포되는 경우가 많아 venv나 uv로도 pip install torch만으로 GPU를 사용할 수 있는 경우가 늘었습니다. 다만 CUDA 버전 조합이 까다롭거나 RAPIDS, 특정 지리정보 라이브러리(GDAL 등)처럼 시스템 C 라이브러리와 얽힌 패키지를 쓸 때는 여전히 conda 쪽이 충돌 없이 설치되는 경우가 많습니다.
상황별 선택 기준

첫 환경설정을 고민하는 입문자라면 다음 기준으로 판단하는 것이 실질적으로 도움이 됩니다.
강의나 튜토리얼이 conda 명령어 기준으로 작성되어 있거나, GDAL·RAPIDS·특정 지리공간/신호처리 라이브러리처럼 시스템 바이너리 의존성이 복잡한 패키지를 다뤄야 한다면 conda(또는 가벼운 배포판인 Miniconda)를 선택하는 편이 삽질을 줄여줍니다. 다만 conda의 기본 의존성 해석기(solver)는 패키지가 많아질수록 느려지는 경향이 있어, 최근 conda는 기본 solver를 libmamba 기반으로 교체해 속도를 개선했습니다.
이미 파이썬만 설치되어 있고 numpy, pandas, scikit-learn 정도의 표준적인 PyPI 패키지만으로 학습을 시작한다면 venv로 충분합니다. 별도 설치 과정이 없고, 파이썬을 처음 배울 때 함께 이해해야 할 표준 도구이기도 합니다.
여러 프로젝트를 오가며 파이썬 버전 자체도 자주 바꾸고, 설치 속도와 재현 가능한 lock 파일(uv.lock)까지 챙기고 싶다면 uv가 2024년 이후 등장한 대안 중 가장 실용적입니다. pyenv + venv + pip-tools 세 도구를 조합해 하던 일을 uv 하나로 처리할 수 있다는 점이 장점입니다. 공식 문서 https://docs.astral.sh/uv/ 의 pip 인터페이스 섹션을 보면 기존 pip 명령어와 거의 1:1로 대응되어 있어 학습 곡선도 낮은 편입니다.
정리 및 다음 단계
머신러닝 첫 환경설정에서 conda, venv, uv 중 하나만 정답이라고 말하기는 어렵습니다. venv는 표준 내장 도구로 가볍게 시작하기 좋고, conda는 CUDA나 시스템 바이너리 의존성이 얽힌 패키지를 설치할 때 안정적이며, uv는 속도와 파이썬 버전 관리까지 한 번에 처리하고 싶을 때 유리합니다. 처음이라면 venv로 pip install 명령어와 가상환경 개념부터 익히고, 이후 GPU 관련 패키지에서 의존성 충돌을 자주 겪게 되면 conda를, 여러 프로젝트를 빠르게 오가며 작업 속도를 높이고 싶어지면 uv를 도입해보는 순서를 추천합니다. 오늘 바로 실행할 수 있는 다음 단계는 지금 사용 중인 프로젝트 폴더에서 python -m venv .venv 명령을 실행해보고, 익숙해지면 같은 폴더에서 uv venv 명령으로 속도 차이를 직접 비교해보는 것입니다.
자주 묻는 질문(FAQ)
Q1. conda와 venv를 같이 써도 되나요?
기술적으로는 conda 환경 안에서 다시 venv를 만드는 것도 가능하지만, 두 도구가 환경을 인식하는 방식이 달라 혼란을 일으키기 쉽습니다. 프로젝트 하나에는 conda든 venv든 uv든 한 가지 방식만 사용하는 것을 권장합니다.
Q2. uv가 pip보다 정말 빠른가요?
uv는 Rust로 작성되었고 전역 캐시와 하드링크 방식을 활용해 동일 패키지를 여러 환경에서 재설치할 때 중복 다운로드를 줄이는 구조를 가지고 있어, 특히 캐시가 쌓인 이후의 반복 설치에서 체감 속도 차이가 큽니다. 정확한 수치는 패키지 구성과 네트워크 환경에 따라 달라지므로 공식 벤치마크 문서를 참고하는 것이 정확합니다.
Q3. GPU를 쓰는 딥러닝 환경도 uv나 venv로 충분한가요?
PyTorch, TensorFlow 모두 CUDA 런타임을 포함한 pip 휠을 공식 배포하고 있어 많은 경우 venv나 uv만으로도 GPU 환경 구성이 가능합니다. 다만 시스템에 설치된 NVIDIA 드라이버 버전과 패키지가 요구하는 CUDA 버전 호환성은 별도로 확인해야 하며, 이 부분에서 충돌이 반복된다면 conda-forge 채널을 통한 설치를 시도해보는 것이 좋습니다.