1. 파이썬 가상환경 (Virtual Environment)
하나의 물리적인 머신에 여러 개의 가상 머신을 올릴 수 있듯이, 한 머신에 여러 개의 파이썬 가상환경을 만들 수 있다. 이러한 가상환경은 파이썬 개발 환경을 독립적으로 만들기 위한 것으로, 각 개발환경마다 다른 파이썬 버전을 사용할 수도 있고 다른 패키지를 설치할 수 있다. 가상환경은 그 안에 파이썬 개발환경과 관련된 모든 것을 가지고 있다(Self-contained 환경). 만약 프로젝트마다 서로 다른 버전의 파이썬을 사용한다거나 각 프로젝트에 필요한 패키지가 다를 경우 혹은 개발환경을 그대로 나중에 실제 서버에 옮기고 싶을 경우 가상환경을 사용하면 편리하다.
2. 가상환경 만들기
파이썬 3.3 버전 이상에서 가상환경을 사용하기 위해서는 pyvenv 혹은 venv 를 사용한다. 참고로 가상환경을 만드는 다른 방법으로 virtualenv를 사용할 수 있는데, 이는 pypi.python.org 로부터 다운받아 사용한다.
먼저 pyvenv 를 사용하여 가상환경을 만들어 보자. 가상환경은 하나의 디렉토리 밑에 생성되는데, 가상환경을 만들 디렉토리로 이동한 후 아래와 같은 절차를 따른다. 먼저 리눅스나 Mac OS에서 venv1 이라는 가상환경을 만드는 과정을 살펴본다.
-
가상환경 생성: 아래는 현재 디렉토리 밑에 venv1 이라는 폴더를 만들고 venv1 이라는 가상환경을 만드는 것이다.
$ pyvenv venv1
-
가상환경 활성화: 가상환경이 생성된 후, 그 가상환경으로 들어가기 위해 아래와 같이 activate 를 실행하여
가상환경을 활성화를 해주어야 한다.
$ source venv1/bin/activate
다음 윈도우즈에서 venv1 이라는 가상환경을 만드는 과정은 다음과 같다.
-
가상환경 생성: 아래는 C:\PyApp 디렉토리 밑에 venv1 이라는 폴더를 만들고 venv1 이라는 가상환경을 만드는 것이다.
C:\Python35> python .\Tools\scripts\pyvenv.py C:\PyApp\venv1
-
가상환경 활성화: 먼저 가상환경 디렉토리로 이동하여 Scripts 폴더로 가서 activate를 실행한다.
C:\PyApp\venv1\Scripts> activate.bat
참고로 가상환경의 파이썬 버전 정보는 가상환경 디렉토리 안의 pyvenv.cfg 파일을 살펴보면 알 수 있다.
3. venv 사용법
다음은 Mac OS에서 venv 모듈을 사용하여 새 가상환경(venv1 라고 명명)을 생성하는 방법이다. 첫번째 명령은 현재 디렉토리 밑에 venv1 이라는 하위 디렉토리를 만들고, 그 안에 가상환경과 관련된 파일을 생성하게 되고, 두번재 명령은 이 가상환경을 활성화 하는 것이다.
$ python3 -m venv venv1 $ . venv1/bin/activate
참고로, 만약 Github와 같이 외부에서 Clone한 파이썬 프로젝트가 종속 패키지들을 가지고 있는 경우 보통 requirements.txt 파일에 종속 패키지들이 정의되어 있는데, 이들 패키지들을 다운받기 위해서는 다음과 같은 명령을 실행할 수 있다.
$ cd AppFolder $ pip3 install -r requirements.txt
4. 가상환경에 패키지 설치 및 파이썬 실행
가상환경을 활성화한 후에 필요한 패키지를 설치하기 위해 pip과 같은 패키지 매니저를 사용할 수 있다. 예를 들어, 아래는 가상환경 venv1 에 numpy 를 설치하는 예이다. 이렇게 설치된 numpy 는 해당 가상환경 내에서만 유효하며 시스템이나 다른 가상환경에 영향을 미치지 않는다.
~/venv1/bin$ . activate (venv1) ~/venv1/bin$ pip install numpy
가상환경에서 파이썬을 실행하는 것은 간단하다. 가상환경 프롬프트에서 "python" 을 실행하면 된다.
(venv1) ~/venv1$ python Python 3.4.4 (v3.4.4:737efcadf5a6, Dec 19 2015, 20:19:30) [GCC 4.2.1 (Apple Inc. build 5577)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>>