우분투 파이썬 가상 환경 구축 및 관리: venv, virtualenv, pipenv 비교와 실전 가이드

파이썬 가상 환경의 필요성과 도구 비교

파이썬으로 다양한 프로젝트를 진행할 때, 각 프로젝트마다 독립된 실행 환경을 구성하는 것은 필수적입니다. 가상 환경은 패키지 버전 충돌을 방지하고, 프로젝트별 의존성을 깔끔하게 관리할 수 있게 해줍니다. 또한, 더 이상 사용하지 않는 환경은 해당 디렉터리만 삭제하면 되므로 유지보수가 매우 용이합니다.

주요 가상 환경 도구 비교

  • venv: 파이썬 3.3 버전부터 기본으로 내장된 모듈입니다. 파이썬 2에서는 사용할 수 없으며, virtualenv와 사용법이 유사하지만 내부 동작 방식은 다릅니다. 가장 가볍고 직관적인 도구입니다.
  • virtualenv: 파이썬 2와 3 모두를 지원하는 서드파티 도구입니다. venv보다 더 많은 옵션을 제공하지만, 추가 설치가 필요합니다.
  • pipenv: 파이썬 공식 문서에서 권장하는 고급 패키지 관리 도구입니다. pipvirtualenv의 기능을 통합했으며, PipfilePipfile.lock을 통해 의존성 잠금(Dependency Locking)과 보안 취약점 관리를 지원합니다.

1. venv를 활용한 경량 가상 환경 구성

가상 환경 생성 및 활성화

venv 모듈을 사용하여 현재 디렉터리에 새로운 가상 환경을 생성할 수 있습니다.

# 'workspace_env'라는 이름의 가상 환경 생성
python3 -m venv workspace_env

# 가상 환경 활성화
source workspace_env/bin/activate

활성화가 완료되면 터미널 프롬프트 앞에 (workspace_env) 표시가 나타납니다. 이후 실행하는 모든 파이썬 명령어는 이 격리된 환경 내에서 수행됩니다.

pip를 이용한 패키지 관리

가상 환경이 활성화된 상태에서 pip를 통해 PyPI(Python Package Index)의 패키지를 설치할 수 있습니다. 공식적으로는 python3 -m pip 형식을 권장합니다.

# 특정 버전의 패키지 설치
python3 -m pip install requests==2.28.1

# 버전 범위를 지정하여 설치
python3 -m pip install "django>=4.0,<5.0"

# 패키지 업데이트
python3 -m pip install --upgrade requests

# 패키지 제거
python3 -m pip uninstall requests

requirements.txt 기반 환경 복제

오픈소스 프로젝트를 클론할 때 흔히 볼 수 있는 requirements.txt 파일을 사용하면 의존성을 한 번에 설치할 수 있습니다.

# 현재 환경의 패키지를 파일로 내보내기
python3 -m pip freeze > dependencies.txt

# 파일을 기반으로 패키지 일괄 설치
python3 -m pip install -r dependencies.txt

2. virtualenv를 이용한 유연한 환경 구축

virtualenv는 시스템에 기본적으로 포함되어 있지 않으므로 전역 환경에서 먼저 설치해야 합니다.

python3 -m pip install virtualenv

환경 생성 및 인터프리터 지정

특정 파이썬 버전을 명시하여 가상 환경을 구축할 수 있습니다.

# 프로젝트 디렉터리로 이동
cd my_backend_project

# 파이썬 3.9 인터프리터를 명시하여 'sandbox' 환경 생성
virtualenv -p /usr/bin/python3.9 sandbox

# 환경 활성화 및 비활성화
source sandbox/bin/activate
deactivate

3. pipenv를 활용한 고급 의존성 관리

pipenvrequirements.txt의 한계(예: 서브 의존성 추적 불가, 해시 검증 부재)를 극복하기 위해 설계되었습니다. 개발(Development) 환경과 프로덕션(Production) 환경을 명확히 분리할 수 있으며, .env 파일도 자동으로 로드합니다.

설치 및 초기화

우분투 환경에서는 apt 또는 pip를 통해 설치할 수 있습니다.

sudo apt install pipenv

참고: 우분투 20.04 환경에서 pipenv install 실행 시 ModuleNotFoundError: No module named 'virtualenv.seed.via_app_data' 오류가 발생할 수 있습니다. 이 경우 pip3 install virtualenv==20.0.23 명령어로 virtualenv 버전을 다운그레이드하여 해결할 수 있습니다.

프로젝트 환경 설정 및 패키지 설치

프로젝트 루트 디렉터리에서 pipenv를 초기화하고 패키지를 추가해 보겠습니다.

# 가상 환경 초기화 및 Pipfile 생성
pipenv install

# 가상 환경 셸(Shell) 진입
pipenv shell

# 프로덕션용 패키지 설치 (Pipfile의 [packages]에 기록됨)
pipenv install fastapi uvicorn

# 개발용 패키지 설치 (Pipfile의 [dev-packages]에 기록됨)
pipenv install --dev pytest black

위 명령어를 실행하면 Pipfile과 함께 정확한 버전과 해시값이 기록된 Pipfile.lock 파일이 자동 생성됩니다.

주요 pipenv 명령어

  • pipenv graph: 현재 설치된 패키지들의 의존성 트리를 시각적으로 출력합니다.
  • pipenv --where: 현재 프로젝트의 루트 경로를 확인합니다.
  • pipenv --venv: 가상 환경이 생성된 실제 디렉터리 경로를 확인합니다.
  • pipenv uninstall fastapi: 지정된 패키지를 환경에서 제거합니다.
  • pipenv --rm: 현재 프로젝트에 연결된 가상 환경을 완전히 삭제합니다. (단, Pipfile은 유지되므로 추후 pipenv install로 동일한 환경을 쉽게 복원할 수 있습니다.)

만약 패키지 다운로드 속도가 느리다면, Pipfile 내의 [source] 섹션에 있는 url을 미러 서버(예: https://pypi.tuna.tsinghua.edu.cn/simple)로 변경하여 네트워크 병목 현상을 완화할 수 있습니다.

태그: python ubuntu venv virtualenv pipenv

6월 10일 19:06에 게시됨