서론
파이썬으로 개발을 하다 보면 표준 라이브러리에 포함되지 않은 외부 모듈이나 패키지가 필요한 순간이 자주 찾아옵니다. 문제는 이런 패키지들이 특정 애플리케이션에서만 필요하다는 점입니다.
예를 들어 시스템에 파이썬 3.6이 설치되어 있는데, 진행 중인 프로젝트가 정확히 파이썬 2.7 버전을 요구한다고 가정해 보겠습니다. 이 경우 새로운 패키지뿐만 아니라 이미 설치된 파이썬 자체의 특정 버전이 필요해집니다. 두 버전의 요구 사항이 서로 충돌하기 때문에 2.7이든 3.6이든 어느 한쪽을 설치하면 다른 애플리케이션이 실행되지 않는 상황이 발생합니다.
이러한 문제를 해결하는 가장 효과적인 방법은 프로젝트마다 독립적인 가상 환경(virtual environment)을 만드는 것입니다. Virtualenv는 서로 격리된 파이썬 환경을 생성할 수 있게 해주는 도구로, 프로젝트에 필요한 실행 파일과 패키지를 모두 담은 자체 포함형(self-contained) 폴더를 만들어 줍니다.
왜 가상 환경이 필요할까?
가상 환경 도구인 virtualenv를 사용하는 핵심 목적은 의존성(dependency) 문제와 파이썬 패키지 버전 충돌, 그리고 간접적으로는 권한(permission) 문제를 해결하는 데 있습니다. 프로젝트별로 환경을 분리하면 서로 다른 버전의 패키지가 충돌하지 않고, 시스템 전역 환경도 깨끗하게 유지할 수 있습니다.
가상 환경 설치를 위한 준비 사항
먼저 컴퓨터에 파이썬(반드시 최신 버전일 필요는 없습니다)과 pip 패키지 관리자가 설치되어 있어야 합니다. 다만 파이썬 3.4 이상을 사용하고 있다면 pip이 표준 라이브러리에 기본 포함되어 있으므로 별도 설치가 필요 없습니다. 만약 둘 중 하나라도 없다면 먼저 설치하는 것이 좋습니다.
가상 환경 생성하기
명령 프롬프트(실행 창에 cmd 입력)를 연 뒤, 가상 환경을 설치하고자 하는 디렉터리 경로로 이동합니다.
파이썬 3.x를 사용하지 않는 경우에는 pip으로 virtualenv 도구를 먼저 설치해야 합니다.
Shell
pip install virtualenv
이미 virtualenv가 설치되어 있다면(파이썬 3 사용자이거나 본인도 모르게 설치되어 있는 경우) 위 명령 실행 시 다음과 같은 메시지가 출력됩니다.
>pip install virtualenv
Requirement already satisfied: virtualenv in c:\python\python361\lib\site-packages (15.1.0)
먼저 작업용 새 폴더를 만듭니다.
Shell
mkdir python-virtual-environments && cd python-virtual-environments
위 명령을 실행하면 새로 만든 폴더 안으로 이동합니다. 이제 이 디렉터리 안에 새로운 가상 환경을 생성합니다.
# 파이썬 2.x 버전의 경우 —
virtualenv myenv
# 파이썬 3.x 버전의 경우 —
python -m venv myenv
위 스크립트를 실행하면 myenv라는 이름의 새 폴더가 만들어지며, 그 안에 여러 디렉터리와 파일들이 생성됩니다. 디렉터리 구조는 대략 다음과 같습니다.
├── Include
│ ├── abstract.h
│ ├── accu.h
│ ├── asdl.h
│ ├── ast.h
│ ├── bitset.h
……
├── Lib
│ ├── __future__.py
│ ├── __pycache__
│ ├── _bootlocale.py
│ ├── _collections_abc.py
│ ├── _dummy_thread.py
│ ├── _weakrefset.py
│ ├── abc.py
│ ├── base64.py
│ ├── bisect.py
│ ├── codecs.py
……
├── pip-selfcheck.json
├── Scripts
│ ├── activate
│ ├── activate.bat
│ ├── activate.ps1
│ ├── activate_this.py
│ ├── deactivate.bat
│ ├── easy_install.exe
│ ├── easy_install-3.6.exe
│ ├── pip.exe
│ ├── pip3.6.exe
│ ├── pip3.exe
│ ├── python.exe
│ ├── python36.dll
│ ├── pythonw.exe
│ └── wheel.exe
각 디렉터리의 역할은 다음과 같습니다.
Include(디렉터리): 파이썬 패키지를 컴파일하는 데 필요한 C 헤더 파일
Scripts(디렉터리): 가상 환경과 상호작용하는 파일들(활성화 스크립트 등)
Lib(디렉터리): 파이썬 버전 사본과, 각 의존성이 설치되는 site-packages 디렉터리 포함
가상 환경 활성화 방법
Scripts 디렉터리 안에서 주목할 만한 파일은 바로 activate 스크립트입니다. 이 스크립트는 해당 환경의 파이썬 실행 파일과 site-packages를 기본값으로 사용하도록 셸을 설정해 줍니다.
하지만 "myenv"라는 가상 환경의 패키지나 리소스를 격리된 상태로 사용하려면 먼저 활성화(activate)해야 합니다. 아래 화면과 같이 명령을 실행하면 됩니다.

가상 환경이 활성화되면 외부 환경과 분리된 상태에서 프로젝트에 필요한 패키지와 의존성들을 자유롭게 설치할 수 있습니다. 예를 들어 데이터 사이언스 프로젝트를 진행 중이라면 아래 명령 한 줄로 필요한 패키지들을 한 번에 설치할 수 있습니다.
(myenv) C:\Users\rajesh\python-virtual-environments>pip install numpy scipy matplotlib ipython jupyter pandas
프로젝트 작업이 끝나면 deactivate 명령으로 가상 환경을 빠져나올 수 있습니다.
(myenv) C:\Users\rajesh\python-virtual-environments>deactivate
C:\Users\rajesh\python-virtual-environments>
이제 다시 일반 윈도우 명령 셸로 돌아온 것을 확인할 수 있습니다.