파이썬의 가상개발환경 virtualenv 사용

0
15

파이썬은 2.7 부터 시작해서, 지금은 3.8 까지 버젼이 나오고 있다. 문제는 새로운 버젼이 이전 버젼을 그대로 포용하지 못한다는 것이고, 이 문제는 대부분의 프로그래밍 언어에서 동일하게 가지고 있는 문제다.

그래서 어쩔수 없이 사용하게 되는 것이 파이썬의 개발환경을 PC 마다 하나씩 두는 것이 아니라 PC 의 디렉토리마다 (프로젝트마다) 별도로 두는 방식이다. 이것을 가상개발환경이라고 한다.

PC 의 개발환경안에 가상개발환경을 두어 다양한 프로젝트에 따라 분리된 개발환경을 두는 것이다. 즉, 다음과 같은 예를 들어보자. A 라는 프로젝트는 예전에 만들던 것으로 2.7 을 사용했고, B 라는 프로젝트는 그 후에 3.5를 사용했다. C 프로젝트는 3.7을 사용했는데, 그때 함께 사용했던 패키지 중 D라는 패키지가 2.2 다. E 프로젝트는 3.7을 사용하지만 그 후에 만들어지면서 향상된 D패키지 2.3 을 쓴다.

다양한 파이썬의 버젼이 PC 에 설치되어야 하고, 동시에 각 버젼마다 패키지가 별도로 설치되어야 한다. 그래서 사용되는 것이 가상개발환경이다. 개별 프로젝트 마다 거기에 따른 파이썬이 별도로 설치되고, 패키지도 별도로 설치되어야 한다. 나중에 나온 패키지가 더 좋은 것이라고 생각하는 것은 심각한 오류다. 만들때 사용된 것이 그대로 유지될 수 있어야 한다. 성능은 조금 좋아졌지만 옵션이 변경되어 버린 패키지가 있다면 그것을 고치기 위해 가볍게는 며칠, 심하면 몇달을 고생할 수도 있다.

파이썬의 가상개발환경을 위한 프로그램은 virtualenv, pipenv, venv, pyenv 등 다양하게 많이 있다. 어떤 것을 사용하든 자신에게 적당한 것을 사용하면 된다. 그 중 여기서는 virtualenv 를 사용한다. virtualenv 가 다른 것들에 대해 특별하게 뛰어난 것은 없다. 다만, 다른 것들에 비해 문제를 덜 일으키고, 가장 쉽게 관련 자료를 찾기 쉽다.

pipenv 는 성능이 뛰어난 것 같지만 업데이트가 너무 늦다. 최근에는 거의 업데이트를 하지 않고 있다. 일부 개발자들에게 pipenv 는 더 이상 살아있지 않다고 판정받고 있다. 사실 성능만을 보면 가장 뛰어난 것 같은데, 몇가지 치명적인 단점들이 여전히 남아 있는 듯 하다. 그래서 사용하지 않기도 했다.

venv 는 python 2 지원이 안된다. 파이썬 버젼 변경이 안된다.

pyenv 는 2 버젼부터 3.5 까지는 자유롭게 버젼을 변경할 수 있었지만 3.6 이후로는 사용되지 않는다. 이후 버젼을 지원하지 않는다. 결국 3.6 과 3.7 을 주로 사용하는 지금에는 pyenv 는 사용할 수 없다.

결국 2.7 부터 최근의 3.7 까지 지원하면서 변경이 용이한 것은 virtualenv 만 남는다. 사용성에서 가장 편한 것은 pipenv 지만, 패키지 이름을 잘못 치거나 하면 꽤나 귀찮은 일을 당하게 되므로 그냥 virtualenv 를 사용하기로 한다.

현재 윈도우10 64bits PC 에는 WSL(Windows Subsystem for Linux) 이 설치될 수 있다. 현재 내 PC 는 윈도우 10, 64비트 홈에디션으로 WSL 설치 후 우분투 18.04 LTS 를 설치해 둔 상태이다.

윈도우10 에서는 파이썬 3.5, 3.6, 3.7 을 설치해 두었고, WSL 의 우분투는 기본탑재된 파이썬 3.6.9 가 있다. 그래서 리눅스와 윈도우명령창(cmd)을 기준으로 virtualenv 기본 사용법을 설명한다.

virtualenv 설치

윈도우 환경에서 설치

>pip install virtualenv

리눅스 환경에서 설치

$ pip3 install virtualenv

가상개발환경 설치

평범한 설치

> virtualenv myvenv

$ virtualenv myvenv

특정한 버젼으로 설치

> virtualenv -p c:\Python\Python36\python.exe myvenv

$ virtualenv –python=python3.6 myvenv

위는 다음과 같이 순서를 바꾸거나 줄여서 사용할 수 있다. 셋 중 어느명령을 써도 된다.

$ virtualenv –python=python3.6 myvenv
$ virtualenv myvenv –python=python3.6
$ virtualenv myvenv –python=3.6

가상개발환경 실행

C:\…>myvenv\Scripts\activate
(myvenv) C:\…>

…$source source myvenv/bin/activate
(myvenv) …$