파이썬(Python) - 가상 환경(Virtual Environments)
가상 환경(Virtual Environments)이란?
가상 환경은 독립적인 파이썬 실행 환경을 의미합니다.
각각의 가상 환경은 다른 환경에 영향을 미치지 않으며 각자 다른 종류와 버전의 패키지를 가질 수 있습니다.
이렇게만 얘기하면 이해하기 힘드니 가상 환경이 왜 필요한지부터 어떤 문제를 해결해주는지 알아봅시다.
가상 환경이 왜 필요한가?
우리는 파이썬을 설치할때 기본적으로 같이 딸려오는 패키지 매니저인 pip를 이용해서 필요한 패키지를 설치할 수 있습니다. 이렇게 pip로 설치한 패키지는 전역으로 설치되기 때문에 그 어떤 파이썬 스크립트라도 제약 없이 사용할 수 있습니다.
예를 들어 pip로 Numpy 모듈을 설치했다면 모든 파이썬 스크립트에서 Numpy 모듈을 사용할 수 있게 됩니다.
만약 프로젝트를 단 하나만 진행한다면 전역으로 패키지를 설치한다 한들 크게 문제될 것은 없습니다.
하지만 프로젝트가 여러개일 경우 문제가 발생할 수 있습니다. 예시를 하나 말씀드리겠습니다.
1. 여러분은 pip로 Django 3.0 버전을 전역으로 설치한 다음 이를 이용하여 웹 서비스를 하나 만들었습니다. 생각보다 만족스러운 서비스였기에 여러분은 계속해서 유지보수 하기로 마음먹은 상황입니다.
2. 시간이 흘러 Django 3.1 버전이 배포되었고, 여러분은 3.1 버전으로 장고를 업데이트 합니다. 그리고 새로운 프로젝트를 시작하게 됩니다.
3. 그런데 맙소사, 전에 만든 프로젝트가 갑자기 동작을 안합니다. 알고 보니 Django 3.0 버전과 3.1 버전은 호환이 되지 않는다고 합니다.
4. 새로운 프로젝트도 진척이 꽤 된 상황. 여러분은 진퇴양난에 빠져버렸습니다.
(단순한 예시입니다! 실제로 Django 3.0 버전과 3.1 버전이 호환이 안되는 것은 아닙니다.)
이제 무슨 문제가 발생하는지 아시겠나요?
이전에 만든 프로젝트의 패키지가 다른 버전의 패키지와 호환이 되지 않을 때 상당히 곤란해집니다. 패키지는 꾸준히 업데이트 되기 때문에 언제든지 이런 문제가 발생할 수 있죠. (업데이트를 안하면 해결되는거 아닌가요? 라는 질문은 넣어두세요..)
가상 환경의 활용과 모듈
가상 환경은 상술한 문제를 해결해 줍니다.
각자 독립된 개발 환경을 제공해 주기 때문에 어떤 프로젝트는 구버전 패키지를, 어떤 프로젝트는 최신버전 패키지를 사용하는 식의 개발이 가능해지는 것입니다.
즉 그림으로 나타내면 대충 다음과 같습니다.
참고로, 파이썬 인터프리터 버전도 가상 환경에 포함이 됩니다.
따라서 가상 환경에 따라 파이썬 자체의 버전도 분리가 가능하며, 어떤 가상 환경을 실행중일 때 파이썬 인터프리터를 실행하면 가상 환경에 설치된 파이썬 인터프리터를 실행합니다.
이러한 가상 환경을 관리할 수 있는 모듈은 대표적으로 venv, virtualenv, pipenv, conda 가 있으며 필자는 현재 conda를 사용하여 가상 환경을 관리하고 있습니다.
(conda에 대해서는 다른 글에서 따로 다루겠습니다.)