이게 다 패키지 때문이야, virtualenv



virtualenv와의 만남 이전에 파이썬(Python)이 있었는데, 프알못인 내가 ‘파이썬’을 들었을 때 처음 떠오르는건 경주월드의 ‘파에톤(Phaethon)’이었다🎢(부아앙)….
쉽게 말해 파이썬도 파이썬 패키지도 전혀 알지 못하는 상태라 왜 virtualenv를 사용해야 하는지 이해되지 않았고, 프로젝트를 만들 때 마다 궁금해하다 결국 이렇게 문서를 정리하게 되었다(는 fake, 일하기 싫어서 😂).

Virtualenv 필요성

Virtualenv 공식 사이트에 의하면 “virtualenv is a tool to create isolated Python environments.”

번역하면 독립된 파이썬 환경을 만들기 위한 툴인데, 왜 파이썬을 독립시켜야 하는거지?라는 의문이 생기지 않을 수 없다. 열심히 서치해본 결과 이유는 바로…(쓸데없는 농담은 하지 말아야지) 파이썬의 무한한 기능 때문이라 할 수 있다.

파이썬 언어로 개발된 무수히 많은 패키지를 이용해 다양한 기능을 구현할 수 있어 파이썬은 많은 개발자가 프로젝트에 널리 사용하고 있다. 그리고 일반적으로 하나의 프로젝트에 사용되는 패키지의 개수는 손가락으로 세기 무색할 만큼 많은 편이다. 그런데 다양한 패키지를 사용하다 보면 이런저런 문제가 발생하게 되는데 다음과 같은 경우를 생각해보자.

경우 1 두 개의 프로젝트를 관리하는데 두 프로젝트 모두 iFoo라는 패키지를 사용한다. A 프로젝트에서는 버전 1.0.0의 iFoo를 사용하는데, B 프로젝트에서는 iFoo 버전 2.0.0 기능이 필요하다면??

경우 2 이미 설치된 응용프로그램을 업데이트하지 않고 그대로 유지하고 싶은데, 관련 라이브러리의 버전이 변경되버려 응용프로그램이 작동하지 않는 경우에는 어떻게 대응해야 하지?

경우 3 여러 사람들과 공유하는 프로젝트의 글로벌 디렉토리에 패키지를 설치하면 안 되는 상황엔 어떻게 프로젝트를 관리해야 할까?

등등…

위와 같은 상황뿐만 아니라, 다수의 패키지를 사용하다 보면 패키지 버전이나 의존성(dependency) 때문에 충돌이 일어나는 경우가 비일비재하다.

이러한 모든 경우를 해결하기 위해 패키지를 독립적으로 관리하는 방법이 등장했는데 Python에서 사용되는 기능이 바로 virtualenv(가상환경을 의미하는 Virtual Environment의 줄임말)이다.

정리하자면, virtualenv를 사용하면 독립된 개발환경을 구축 할 수 있고, 다른 환경과 패키지를 공유하지 않기 때문에 각 프로젝트에 필요한 버전의 패키지를 자유롭게 사용할 수 있다.


Virtualenv 사용법

1. 시스템에 virtualenv를 설치한다.
virtualenv는 가상환경을 구축하기 위한 패키지이므로 가상환경이 아닌 시스템 디렉토리에 설치해야 하며 처음 1번만 설치하면 어디서나 활용할 수 있다.
sudo pip install virtualenv
2. virtualenv를 사용한다.
가상환경을 구축하고 싶은 디렉토리에서 가상환경 생성을 의미하는 명령어인 venv을 실행한다.
virtualenv venv

3. 필요한 패키지를 설치한다.

자세한 내용은 공식 사이트의 User Guide 문서 참조 📄

참고

  • 파이썬 버전 2에는 위처럼 별도로 virtualenv 패키시를 설치해야 사용할 수 있지만, 워낙 많이 사용되는 패키지이다 보니 파이썬 버전3에는 기본 모듈로 포함되어 별도의 설치 없이 바로 사용할 수 있다.
  • 용량이 큰 패키지의 경우 모든 환경마다 따로 설치하면 시간과 메모리가 많이 소모되니 일반적으로 사용하는 패키지의 경우 글로벌로 설치하는 것을 고려하는 것이 좋다.