가상 환경을 사용한 Python 설치 - Virtualenv, autoenv

반응형

이번엔 Python을 가상 환경에서 설치하는 방법을 알아봅시다.



왜 Python을 가상 환경에서 설치해야 할까요?



Python의 버전은 현재 2.7 버전과 3.x 버전이 존재합니다. 아마 프로그래밍을 조금 해보신 분들 중에 Java 라는 언어로 프로그래밍을 많이 해보신 분들이라면, 이런 버전의 차이에 굉장히 반감을 하거나 민감하게 반응하실 수 있습니다.


그렇습니다. 그 이유 중에 하나는 바로 여러분들이 프로그램을 개발하다 반드시 사용하게 되는 바로 "라이브러리"라는 녀석 때문이죠. 물론 공개된 라이브러리들은 대부분 최신 버전에 맞춰 수정이 되긴 하지만, 자신이 개발하는 프로젝트 내지 프로그램이 한 라이브러리만 쓰는 것은 아니기 때문에 모든 라이브러리에 버전을 맞추려면 여러 가지 고려해야될 사항이 많아집니다. 


Java의 경우, Java 7 버전과 Java 8 버전을 동시에 설치해야하는 번거로움이 생깁니다. 물론 설치에 대한 번거로움이 끝이 아니죠. 여기에 자신이 어떤 버전의 Java를 쓸 것인지 물어보지도 않고, 그냥 갔다가 컴파일 해버려서 라이브러리 간에 버전 충돌이 일어나는 일이 생기기도 합니다. 여간 불편한 것이 아니죠..


그래서 Python에는 이 개발 환경을 분리시키기 위해 가상 환경이라는 것을 제공합니다.

그림으로 보면, 현재 여러분 PC에 현재 Python이 설치되어 있고, 현재 설치된 Python을 두 공간으로 분리해서 위 프로젝트는 2.7버전, 아래 프로젝트는 3.x 버전으로 환경을 나누게 되면 버전 충돌 문제가 해소됩니다.


Python을 가상 환경으로 구축하는 방법에는 여러 가지가 있지만, 가장 대표적인 방법은 Virtualenv, Anaconda, Docker  방법이 있습니다.


그 중 가장 쉽고 편한 것이 Virtualenv이고, Docker는 최근에 나온 컨테이너 형태의 환경이기 때문에 Python의 가상 환경 뿐만이 아니라 서버의 가상 환경으로도 사용하실 수도 있고, 만약 개발하는 프로젝트가 웹 서버 등의 프로젝트라면, Virtualenv보다는 Docker가 더 좋을 수 있습니다.


이 포스트에서는 간단히 Virtualenv를 사용해 가상 환경을 구축하는 방법을 알아보도록 하겠습니다.



Virtualenv 설치

Virtualenv의 설치는 pip로 간단히 설치할 수 있습니다.


$ sudo pip install --upgrade virtualenv

Linux나 OS X의 경우, sudo 명령어를 이용하여 virtualenv를 설치하시면 됩니다.

혹은 Ubuntu Repository에서도 받으실 수 있습니다.


C:\> pip install --upgrade virtualenv

Windows는 관리자 명령으로 명령 프롬포트를 열어주시고, 위 명령어를 타이핑 하시면 됩니다.



가상 환경 구축

이제 Virtualenv를 설치했으니 이를 이용해 가상 환경을 직접 만들어보도록 하겠습니다.

매우 쉬우니, 그냥 보고 따라하기만 하시면 됩니다.


$ mkdir CVProject

여러분들이 원하시는 경로에 디렉토리를 만들어줍니다. Linux, OS X 에서는 mkdir 명령어를 사용합니다.


C:\Users\K.I.D> md CVProject

Windows는 md 명령어를 사용합니다. (사실 Windows에서 그냥 새 폴더 하나 만든다고 생각하시면 됩니다 ^^;)


$ virtualenv -p ${PYTHON_VERSION} ${DIRECTORY}

virtualenv의 p 옵션을 이용해서 원하시는 Python 버전을 입력하시고, 위에서 만든 디렉토리 이름을 치면, 해당 디렉토리에 Python 가상 환경이 생성됩니다.

ex) Python 2.x 버전은 그냥 Python, Python 3.x 버전은 Python3 라고 입력.




가상 환경 실행

이제 구축을 해봤으니 가상 환경이 제대로 실행되는지 확인해보겠습니다.


$ source CVProject/bin/activate.sh

Linux, OS X는 위 명령어를 이용해 가상 환경을 실행합니다.


C:\Users\K.I.D> CVProject\Scripts\activate

Windows는 Scripts 폴더에 실행 파일이 미리 만들어져 있으므로 이를 실행하면 됩니다.


(CVProject) $ python --version

그럼 이제는 쉘 앞에 자신의 프로젝트 폴더명이 앞에 보일 것입니다.


CVProject) C:\Users\K.I.D> python --version

Windows는 위와 같이 보입니다.


python --version 명령어를 입력해, 자신이 원하는 Python의 버전으로 구축이 되었는지를 확인합니다.


$ whereis python

Linux에서 whereis 명령어를 사용해 python의 PATH를 확인합니다. 마지막 부분에 자신의 가상 환경 경로가 표시됨을 확인할 수 있습니다.



각종 라이브러리 등의 설치는 반드시 (${가상환경 이름})이 나온 상태에서 진행하셔야만 가상 환경에 라이브러리가 설치됩니다. 그렇지 않은 상태에서는 시스템에 설치되므로 반드시 확인바랍니다.



autoenv 사용 (Linux, OS X only)

virtualenv를 사용하려하니 일일이 source 명령어를 사용하는게 매우 번거롭습니다. 그렇다고 터미널이나 쉘을 띄울 때마다 가상 환경을 실행하자니 그것도 문제이지요?


그래서 autoenv를 사용해보기로 했습니다.


$ sudo pip install --upgrade autoenv

autoenv는 kennethreitz님이 개발하신 코드로 virtualenv 디렉토리에 접근하면 자동으로 원하는 커맨드를 입력하게 하는 코드입니다.


작동 방식은 다음과 같습니다.


사실 커맨드 실행이 맞는 표현이겠지만, 우리가 원하는 것은 Virtualenv 실행이 목적이기 때문에, 그렇게 적었습니다 ^^;

이제 실행 방식을 알았으니 자신의 virtualenv 공간에 .env 파일을 생성해봅시다.


$ vim .env

vim 혹은 nano, emacs 같은 에디터를 이용해 .env 파일을 생성합니다.


source ~/CVProject/bin/activate

간단하게 virtualenv만 실행시키는 커맨드를 적었습니다.


source ~/CVProject/bin/activate
clear
echo ''
echo ' I'm CVProject'
echo ' enjoy Coding!'
echo ''
echo '           Created by. Neon K.I.D'
echo ''

고급된 방법(?)으로 스크립트를 작성하실 수도 있습니다.

그럼 이제, 터미널과 쉘을 새로 실행시켜, CVProject 폴더에 들어가면..


$ cd CVProject

Virtualenv 환경에 접근이 가능하다는 것을 알 수 있습니다.


"그런데, 아 나는 이것도 불편해, 간단한 명령어로 처리할 수 있는 방법이 없을까?"


그러시는 분들은, alias를 사용해보는 방법도 있으니, 해당 방법을 써보는 것도 나쁘지 않겠습니다.


$ alias cv='cd CVProject'

저는 간단히 상대 경로를 넣었지만 원래 alias를 하실 때는 절대 경로를 하셔야 됩니다 ^^;

명령어가 잘 동작하는지 확인했으면, 이제 프로필에 넣어주면 되겠죠?


$ vim .bashrc

bashrc 파일을 로드하고, alias 부근이나 아무 군데에 다음과 같이 추가합니다.


alias cv='cd CVProject'

추가하고 저장 한 뒤, 새로운 쉘이나 터미널을 실행하고, cv 명령어만 입력하면 자동으로 가상 환경에 들어가집니다. 



마치며... 

여러가지 내용이 섞여있어 어떤 말인지 모르시는 분들이 많으실 수도 있습니다. 개발 환경을 구축하는 데는 마치 코딩과 같아 여러분들이 얼마든지 튜닝만 한다면 편한 개발 환경이 될 수도 있고, 그렇지 않을 수 있습니다.


Python의 가상 환경은 그만큼의 메리트가 존재합니다. (언어의 사용도 그만큼 메리트가 있었으면.... (?) ) Java에도 개인적으로 이런 환경이 나오기를 원하지만, 그 환경을 Docker가 그나마 메꿔주고 있기 때문에 참 Docker 정말 좋습니다 ^^


여기까지 Virtualenv를 이용한 Python 개발 환경 구축이었습니다.

반응형

Tistory Comments 0