Python (1) - 우분투에서 가상환경(venv) 구성하기
1. 개요
파이썬 프로젝트를 여러 개 다루다 보면 프로젝트마다 필요한 패키지 버전이 다른 경우가 생긴다. 시스템에 설치된 파이썬 하나에 모든 프로젝트의 패키지를 전역으로 설치하면 프로젝트 간 버전 충돌이 나기 쉽고, 최근 우분투는 시스템 파이썬 환경을 pip로 직접 건드리는 것 자체를 막아두기도 한다. 이런 문제를 피하기 위해 프로젝트마다 독립된 파이썬 실행 환경을 따로 만드는데, 이를 가상환경(virtual environment) 이라고 한다.
이번 글에서는 우분투 기준으로 pip를 설치하고, 가상환경을 만들고 활성화하는 과정을 정리한다.
2. pip 설치
pip는 파이썬 패키지를 설치·관리하는 도구다. 우분투 서버 이미지에는 기본으로 들어있지 않은 경우가 많아서 apt로 따로 설치해줘야 한다.
1
sudo apt install python3-pip
3. virtualenv 패키지 설치
가상환경을 만드는 방법에는 표준 라이브러리인 venv 모듈 외에도, 별도 패키지인 virtualenv를 pip로 설치해서 쓰는 방법이 있다.
1
pip3 install virtualenv --break-system-packages
최근 우분투는 시스템 파이썬을 pip로 직접 건드리지 못하도록 막아두고 있어서(PEP 668, externally-managed-environment), pip3 install을 그냥 실행하면 에러가 나는 경우가 많다. --break-system-packages 옵션은 “이 설치가 시스템 환경에 영향을 줄 수 있다는 걸 알고 있으니 그래도 진행해달라”고 명시적으로 허용하는 옵션이다.
시스템 전역 환경을 계속 건드리는 대신, 이후 나올 가상환경 안에서 필요한 패키지를 설치하는 방식으로 넘어가는 것이 더 안전한 방향이다.
4. 가상환경 생성
파이썬에는 가상환경을 만드는 venv 모듈이 표준 라이브러리로 포함되어 있다. 아래 명령으로 원하는 이름의 가상환경 디렉토리를 만들 수 있다.
1
python3 -m venv ./{가상환경이름}
이 명령을 실행하면 지정한 이름의 디렉토리가 생기고, 그 안에 해당 가상환경만을 위한 파이썬 실행 파일과 site-packages(패키지 설치 경로)가 독립적으로 구성된다. 이후 이 가상환경 안에 설치하는 패키지는 시스템 전역 환경이나 다른 가상환경에 영향을 주지 않는다.
5. 가상환경 활성화
가상환경을 만들었다고 바로 적용되는 것은 아니고, 활성화 스크립트를 실행해서 현재 셸이 그 가상환경을 바라보도록 전환해줘야 한다.
1
source {가상환경이름}/bin/activate
활성화되면 터미널 프롬프트 앞에 (가상환경이름)이 표시되고, 이 상태에서 python이나 pip 명령을 실행하면 시스템 전역이 아니라 해당 가상환경 안의 파이썬과 패키지가 사용된다.
가상환경에서 빠져나올 때는 deactivate 명령을 실행하면 된다.
1
deactivate
실행하면 프롬프트 앞의 (가상환경이름) 표시가 사라지고, 다시 시스템 전역 파이썬 환경으로 돌아간다.
6. 정리
우분투에서 파이썬 가상환경을 쓰려면 먼저 python3-pip로 pip를 준비하고, 필요하다면 --break-system-packages 옵션으로 virtualenv 같은 패키지를 설치한다. 실제 가상환경은 표준 라이브러리인 python3 -m venv로 만들고, source .../bin/activate로 활성화해서 그 프로젝트 전용 파이썬 환경으로 진입한다.
이렇게 프로젝트마다 가상환경을 분리해두면, 서로 다른 프로젝트가 각자 다른 버전의 패키지를 요구하더라도 시스템 환경 하나를 공유하며 생기는 충돌 없이 독립적으로 관리할 수 있다.