pip로 설치한 패키지들은, 흔히 말하는 '전역 환경'에서 관리되기에 문제가 생길 수 있습니다. 한 프로젝트에선 Flask 0.13을 쓰고 다른 프로젝트에선 Flask 1.0을 쓰는 버전 관리 문제나, 다른 프로젝트에선 쓰지 않을 numpy를 사용한다거나 하는 경우입니다. 특히 위와 같은 버전 관리 문제의 경우, 여간 번거로운 일이 아닙니다. 프로젝트 A에서 Flask 0.13, 프로젝트 B에서 Flask 1.0을 쓴다면, 아래와 같은 시나리오가 전개됩니다.

  • 프로젝트 A를 진행하기 위해 Flask 0.13 설치
  • 프로젝트 B를 진행하기 위해 Flask를 uninstall하고 1.0 설치
  • 다시 프로젝트 A를 진행하기 위해 Flask를 uninstall하고 0.13 설치
  • Flask uninstall 과정에서 werkzueg, jinja와 같은 의존성 라이브러리는 제거되지 않아 1.0에선 생기지 않던 오류 발생
  • pip, wheel, setuptools만 남기고 모두 삭제하고 다시 Flask 0.13을 비롯한 프로젝트 A의 의존성 설치

이런 문제를 해결하기 위해 virtual environment라는 개념이 존재합니다. 이는 디렉토리 단위로 격리된 Python 환경을 구성해 줍니다. 대표적으로 virtualenv라는 CLI 라이브러리를 사용합니다.

$ pip3 install virtualenv

virtualenv -p [python_version] [venv_name]

virtualenv의 사용법은 매우 간단합니다.

$ virtualenv venv
Using base prefix '/usr/local/Cellar/python/3.6.5_1/Frameworks/Python.framework/Versions/3.6'

(...)

Installing setuptools, pip, wheel...done.

위의 명령을 실행하면 venv라는 디렉토리가 생성되고, 격리된 Python 환경이 구성됩니다. 기본 Python 버전은 virtualenv 패키지가 설치된 경로의 python입니다. 위의 경우 전역의 python 3.6.5 환경에 설치되어 있는 virtualenv를 사용했으므로, python 3.6.5로 구성됩니다. 특정 버전에 대해서 가상 환경을 구성하려면, --python이나 -p 인자를 이용해 버전을 명시하면 됩니다.

$ virtualenv -p python2 venv
Running virtualenv with interpreter /usr/local/bin/python2

(...)

Installing setuptools, pip, wheel...done.

. [venv_name]/bin/activate

venv 하위의 bin 디렉토리에 있는 activate 파일을 실행시켜 가상 환경을 활성화합니다. 활성화에 성공하면, 쉘의 맨 앞에 가상 환경의 디렉토리명이 표시됩니다.

$ . venv/bin/activate
(venv) $

활성화된 가상 환경 안에서 사용하는 pip는 해당 가상 환경에서만 적용되기 때문에, 전역 환경과 확실하게 격리된 환경을 구성할 수 있게 됩니다. 또한 venv가 활성화되는 주체는 쉘 단위기 때문에 디렉토리를 이동해도 계속해서 유지되며, 가상 환경 내에서는 pip와 pip3를 구분하지 않습니다. 가상 환경에서 빠져 나오려면, deactivate 명령을 입력합니다.

(venv) $ deactivate
$ 


'Python 계열 > Python External Library' 카테고리의 다른 글

[Python External Library] virtualenvwrapper  (0) 2018.09.07

+ Recent posts