가상환경이란 파이썬에서 독립적인 프로젝트를 위한 개별적인 공간을 말한다. 가상환경을 이용하면 프로젝트마다 의존성과 라이브러리를 구분하여 관리할 수 있다. 또한 다른 개발자들과 협업하는 경우 개발 환경을 통일하기도 쉽다.
보통 파이썬 환경에서 가상환경을 구축할 떄는 Conda와 Venv를 많이 사용한다.
Conda
콘다는 Anaconda 또는 Miniconda를 통해 설치가 가능하다. (Miniconda가 더 경량화된 버전이다)
콘다 가상환경은 다음과 같이 생성한다. [Window 기준]
conda create --name [가상환경 이름] python=[파이썬 버전]
활성화는 activate 명령어를 사용한다.
activate [가상환경 이름]
콘다는 다음과 같은 특징이 있다.
- 파이썬 외에도 R, Ruby 등 다양한 언어의 패키지를 관리할 수 있다
- 데이터 사이언스와 관련된 복잡한 패키지들을 쉽게 설치 및 관리할 수 있다
- 패키지 간 의존성을 체크해 충돌을 방지한다
Venv
Venv는 파이썬을 위한 가상환경 생성 도구이다. 파이썬 버전 3.3부터 표준 라이브러리에 포함되었다. 시스템의 파이썬 환경에 영향을 주지 않으며, 프로젝트마다 다른 버전의 라이브러리를 사용할 수 있게 해준다.
Venv 가상환경은 다음과 같이 생성한다 [Window 기준]
python -m venv .venv
.venv\Scripts\Activate.ps1 # Window PowerShell 기준 활성화 명령어
source .venv/Scripts/activate # Window Bash 기준 활성화 명령어
source .venv/bin/activate # Linux, MacOS 기준 활성화 명령어
python -m ensurepip --upgrade # pip가 없는 경우 설치
python -m pip install --upgrade pip # pip upgrade
- python: python이라는 프로그램을 사용한다.
- m: 모듈을 스크립트로 호출한다. 다음에 어떤 모듈인지 지정한다.
- venv: 보통 Python에 기본으로 설치되어 있는 venv 모듈을 사용한다.
- .venv: 새 디렉터리인 .venv에 가상 환경을 생성한다.
새 터미널 세션을 시작할 때마다 가상환경을 활성화 해주어야 한다. 또한 해당 환경에 새 패키지를 설치할 때마다 환경을 다시 활성화 해야 한다.
가상환경이 활성화 되어있는지의 여부는 다음과 같이 확인한다.
Get-Command python
위 명령어를 실행했을 때 C:\Users\user\code\awesome-project\.venv\Scripts\python 와 같이 응답이 오면 된다.
venv의 주요 명령어는 다음과 같다.
deactivate # 가상환경 비활성화
pip install [패키지명] # 패키지 설치
pip list # 설치된 패키지 목록 확인
git을 사용하는 경우 .venv의 모든 내용을 git에서 제외하도록 해야한다. 따라서 .gitignore파일에 모두 포함시켜준다.
echo "*" > .venv/.gitignore
Venv는 다음과 같은 특징이 있다.
- 파이썬 기본 모듈이기 때문에 추가 설치가 필요 없고, 사용이 간단하다
- pip freeze > requirements.txt 명령으로 현재 환경의 패키지 목록을 저장하고, 다른 환경에서 pip install -r requirements.txt 명령으로 동일한 환경 구축이 가능하다
Venv로 가상환경 구축하기
가상환경을 구축하기 전에, 편하게 진행하기 위해 uv라는 툴을 사용해보기로 했다. uv는 패키지 설치, 관리, 빌드, 배포까지 모두 가능한 파이썬 종속성/패키지/프로젝트 관리 툴이다.
여기서 궁금해진건 venv랑 uv의 차이이다.
일단 핵심적인 것은 venv와 uv 둘 다 파이썬 개발 환경을 관리하는 도구이지만 venv는 가상환경 uv는 패키지 관리 + 가상환경 관리까지 하는 도구라고 한다.
venv만 활용해서 가상환경을 생성하고 패키지를 설치/관리하려면 venv로 가상환경을 생성하고 pip로 패키지를 설치를 해야한다.
python -m venv .venv
source .venv/bin/activate
pip install fastapi
하지만 uv를 활용하면 가상환경 생성 + 패키지 설치를 모두 uv로 빠르게 할 수 있다.
(uv = pip + venv 기능을 통합한 빠른 패키지 매니저)
uv venv
uv pip install fastapi
한눈에 봐도 venv만 사용했을 때보다 간단한 것을 알 수 있다.
나는 다음과 같은 플로우로 가상환경을 생성했다.
1. pip 설치
python -m ensurepip --upgrade
python -m pip install --upgrade pip
2. pip 명령어로 uv 설치
pip install uv
3. 가상환경 생성
# python 3.11로 프로젝트 초기화
uv init --python python3.11
# python 3.11로 가상환경 생성
uv venv --python python3.11
# 가상환경 활성화
# 관리자 권한으로 PowerShell 실행
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
# 활성화
.venv\Scripts\activate
추가적으로 패키지를 설치하기 위해서는 다음 명령어를 사용하면 된다
uv pip install "fastapi[standard]"
uv add pandas
requirements.txt 파일은 다음과 같이 생성한다.
uv pip freeze > requirements.txt