개요

예전과는 달리 이제는 프로젝트마다 독립된 환경을 구성하는 게 대세입니다.

이렇게 하면 라이브러리 의존성때문에 의존성 지옥(dependency hell) 에 빠질 일도 없고 python 버전을 업그레이드했다고 프로젝트가 안 돌아갈 일이 없기때문이죠.

더구나 이렇게 프로젝트별로 독립된 환경을 구성하면 docker 같은 container 환경이나 serverless 에도 쉽게 적응할 수 있는 장점이 있습니다.


물론 프로젝트마다 패키지를 설치하므로 디스크 용량이 늘어나는 문제는 있겠지만 디스크는 싸고 독립된 환경으로 인한 효용이 더 크기 때문에 별 단점이 되지 않습니다.


virtualenv 는 파이썬 프로젝트마다 쉽게 독립 환경을 구성할 수 있게 해주는 CLI 도구로 venv 와 동일한 역할을 수행합니다.

venv 와 차이점

동일하게 격리된 가상 환경을 만들어 주는 도구로 python 3.3 부터 기본 탑재되어 있습니다. python3 -m venv 명령으로 사용할 수 있지만 virtualenv 에 비해서 다음과 같은 여러 단점이 있으므로 virtualenv 사용을 권장합니다.

  • virtualenv 에 비해서 느림
  • 확장 가능하지 않음
  • 서로 다른 python 을 사용하는 가상 환경 구성 불가
  • pip/pipx 로 업그레이드 불가


설치

python 3.5 이상이라면 pipx 를 통해 설치하는 걸 권장합니다

$ pipx install virtualenv
BASH

또는 pip 를 통해서 할 수도 있습니다.

$ python -m pip install --user virtualenv
BASH

사용

생성

가상 환경을 만들려는 폴더에서 다음 명령을 실행해 주면 현재 python 을 검색하고 PATH/TO/ENV  폴더밑에 가상 환경에 복사해 줍니다.

virtualenv PATH/TO/ENV
BASH


예로 현재 폴더 밑에 venv 폴더를 만들고 여기에 가상 환경을 구성할 경우 다음 명령을 실행합니다.

virtualenv venv
BASH


활성화

가상 환경을 활성화해주어야 격리된 공간에 설치된 python 과 패키지들을 독립적으로 사용할 수 있습니다.

가상 환경을 활성화하려면 source 명령어로 가상 환경 폴더 밑에 bin/activate 를 읽어들이면 됩니다.

source venv/bin/activate
BASH


윈도우 사용자는 bin 대신 scripts 폴더에 있는 activate 를 실행하면 됩니다.

.\venv\Scripts\activate
BASH

activate 는 가상 환경에 설치한 python 과 library 를 시스템에 설치된 것보다 먼저 사용하도록 PATH 와 PYTHONHOME 환경 변수를 잡아주는 역할을 하므로 꼭 실행해야 합니다.

이제 명령어를 실행하면 prompt 가 위에서 생성한 가상 환경 명(즉 venv) 로 표시되는 것을 알수 있습니다.

ls 

(venv)
BASH


이제 pip 는 가상 환경에 패키지를 설치하므로 --user 옵션을 주지 않아도 됩니다.

pip install pandas
CODE


비활성화

가상 환경을 중지하려면 deactivate 명령을 실행하면 됩니다.

deactivate
BASH


python 버전 지정

현재 프로젝트에 특정 파이썬 버전이 필요할 경우 -p 옵션을 사용하면 사용할 python 을 지정할 수 있습니다.

다음은 python 3.9 를 사용하는 venv 라는 가상 환경을 구성합니다.

virtualenv -p /usr/bin/python3.9 venv
BASH



같이 보기


Ref