Python 가상환경 완전 정복 – venv로 프로젝트별 환경 분리하기

1. 패키지 버전 때문에 프로젝트가 충돌하는 상황

프로젝트 A는 Django 3.2가 필요하고 프로젝트 B는 Django 4.2가 필요합니다. 같은 컴퓨터에 두 버전을 동시에 설치할 수 없으니, 한 프로젝트를 작업할 때마다 버전을 바꿔야 하는 번거로움이 생깁니다.

팀원과 개발하는데 내 컴퓨터에서는 잘 되는 코드가 팀원 컴퓨터에서 오류가 나는 상황도 대부분 패키지 버전 차이 때문입니다.

**Python 가상환경(Virtual Environment)**은 프로젝트마다 완전히 독립된 Python 실행 환경을 만들어 이 문제를 해결합니다.

2. 가상환경이 문제를 해결하는 원리

가상환경은 프로젝트 폴더 안에 미니 Python 환경을 하나 만드는 개념입니다.

각 가상환경은 자신만의 Python 인터프리터와 패키지 목록을 가집니다. 프로젝트 A의 가상환경에는 Django 3.2가, 프로젝트 B의 가상환경에는 Django 4.2가 설치됩니다. 두 환경은 완전히 독립적이라 서로 영향을 주지 않습니다.

전용 작업 공간 비유로 이해하면 쉽습니다. 요리사 A는 이탈리안 주방, 요리사 B는 일식 주방을 각자 사용합니다. 같은 건물이지만 재료와 도구가 완전히 독립적으로 관리됩니다.

3. venv로 가상환경 만들기

Python 3.3 이상에는 venv 모듈이 기본으로 내장되어 있어 별도 설치가 필요 없습니다.

프로젝트 폴더에서 가상환경을 만듭니다. 마지막 venv는 생성할 폴더 이름입니다.

python3 -m venv venv

실행하면 프로젝트 폴더 안에 venv 폴더가 생성됩니다. 이 폴더 안에 Python 인터프리터와 패키지가 저장됩니다.

venv 폴더는 Git에 올리지 않습니다. .gitignore에 venv/ 를 추가해 제외합니다.

4. 가상환경 활성화와 비활성화

만든 가상환경은 활성화해야 사용할 수 있습니다.

Linux / Mac 활성화

source venv/bin/activate

활성화되면 터미널 프롬프트 앞에 (venv)가 붙습니다. 이 상태에서 pip install을 하면 시스템이 아닌 가상환경에만 설치됩니다.

Windows 활성화

venv\Scripts\activate

비활성화

deactivate

비활성화하면 (venv) 표시가 사라지고 시스템 Python으로 돌아갑니다.

5. 패키지 설치와 requirements.txt 관리

가상환경을 활성화한 상태에서 패키지를 설치합니다.

pip install django==4.2 pip install requests

현재 가상환경에 설치된 패키지 목록을 파일로 저장합니다.

pip freeze > requirements.txt

생성된 requirements.txt 파일에는 설치된 패키지와 버전이 나열됩니다.

다른 환경(팀원 컴퓨터, 서버 등)에서 동일한 패키지를 한 번에 설치합니다.

pip install -r requirements.txt

이 파일 하나로 모든 환경에서 동일한 패키지 구성을 재현할 수 있습니다.

6. 서버 배포 환경에서 가상환경 사용하기

운영 서버에서도 가상환경을 사용하면 시스템 Python과의 충돌을 방지할 수 있습니다.

서버에서 프로젝트를 배포할 때의 순서입니다.

git clone 또는 git pull로 코드를 받습니다.

python3 -m venv venv

가상환경을 활성화하고 패키지를 설치합니다.

source venv/bin/activate pip install -r requirements.txt

systemd 서비스나 cron에서 Python 스크립트를 실행할 때는 가상환경의 Python 경로를 직접 지정합니다.

/home/ubuntu/myproject/venv/bin/python app.py

이렇게 하면 가상환경을 매번 활성화하지 않아도 가상환경의 Python과 패키지를 사용합니다.

7. 정리 및 다음 단계

오늘 배운 핵심을 정리합니다.

  • Python 가상환경은 프로젝트마다 독립된 Python 환경을 만들어 패키지 버전 충돌을 방지합니다.
  • python3 -m venv venv로 만들고 source venv/bin/activate로 활성화합니다.
  • pip freeze > requirements.txt로 패키지 목록을 저장하고 pip install -r requirements.txt로 동일 환경을 재현합니다.
  • venv 폴더는 .gitignore에 추가해 Git에서 제외합니다.
  • 서버에서는 가상환경의 Python 경로를 직접 지정해 사용합니다.

다음 글에서는 TCP와 UDP의 차이, 어떤 서비스가 어떤 프로토콜을 쓰는지 알아보겠습니다.

댓글 남기기

광고 차단 알림

광고 클릭 제한을 초과하여 광고가 차단되었습니다.

단시간에 반복적인 광고 클릭은 시스템에 의해 감지되며, IP가 수집되어 사이트 관리자가 확인 가능합니다.