2018/08/05

venv가 대체 뭐죠? 왜 필요한가요?

장고걸스 튜토리얼에도 가상환경(virtual environment)에 대한 설명이 나오지만 너무 간략해서 인지 이게 무엇인지 다시 물어보는 분들이 많이 계셨는데요. 몇가지 명령어를 쳐보면서 이게 무엇이고 왜 필요한지 확실하게 알아봅시다.

두개의 프로젝트를 진행해야 하는 상황입니다. 그런데 두개의 프로젝트가 서로 다른 버전의 django를 사용 하고 있습니다. 프로젝트 하나는 저희가 했던 튜토리얼에서 처럼 django 1.11을 사용하고 다른 하나는 최신 버전인 2.1을 사용하는 상황입니다.

그러면 django 버전은 몇을 설치해야 할까요? 1.11 을 설치하면 2.1을 사용하는 프로젝트는 동작하지 않을거고 2.1을 설치하면 1.11을 사용하는 프로젝트는 동작하지 않을겁니다.

venv 는 이런 경우 프로젝트별로 그 프로젝트에 맞는 라이브러리들을 설치할 수 있는 독립된 환경을 제공하는 도구 입니다.

먼저 두개의 프로젝트를 만들어서 각각의 프로젝트별로 가상환경을 만들어보겠습니다.

장고걸스 튜토리얼에서 본것과 같은 방법으로 가상환경을 만들어 보았습니다. 이제 각각의 환경에 서로 다른 버전의 django를 설치해보겠습니다.

pip freeze는 현재 설치되어있는 라이브러리의 목록을 보여주는 명령어 입니다. dj2-project 에는 django 2.1이 dj1-project 에는 django 1.11이 정상적으로 설치된걸 확인하실 수 있습니다.

두개의 환경에서 서로 다른 버전의 django가 설치되어있는 걸 보실 수 있습니다.

그런데 pip을 사용하는 방법이 튜토리얼에서 봤던 방법과 조금 다르죠?

혹시 venv 디렉토리 안을 살펴보신적이 있으신가요?

각각의 가상환경은 자기들만의 python, pip 같은 실행 파일과 라이브러리가 설치되어있는 lib 디렉토리를 가지고 있습니다.

하지만 매번 각 환경의 실행파일을 경로까지 일일이 치기는 번거롭기 때문에 python, pip 명령을 가상환경의 것으로 연결되도록 활성화(activate) 하는 방법을 사용합니다.

which는 내가 실행하려는 프로그램이 어디에 존재하는지 보여주는 명령입니다. 가상환경을 활성화 하기 전에 python 명령은 컴퓨터에 설치되어있는 python을 가르키지만 가상환경을 활성화 하고 난 다음에는 python 명령이 해당 가상환경의 python을 가르키는걸 볼 수 있습니다.

이렇게 하면 좀 더 편하게 쓸 수 있겠죠?

지금까지 venv에 대해서 조금 더 자세히 알아보았습니다. 글을 읽고도 궁금하신 점이 있다면 편하게 질문 올려주세요.

(이 글은 PyJog 모임에서 작성되었습니다.)


Thanks to

  • 정윤원 님의 날카로운 리뷰 덕에 더 나은 글이 될 수 있었습니다.
  • 이한 님이 알려주신 termtosvg를 신나게 썼습니다.