파이썬에서 venv로 가상 환경 사용하기

파이썬 가상 환경이란?

파이썬에서 가상 환경(virtual environment)은 하나의 PC에서 프로젝트 별로 독룁된 파이썬 실행 환경(runtime/interpreter)을 사용할 수 있도록 해줍니다.
가상 환경을 사용하지 않으면 PC 내의 모든 프로젝트에서 운영체제에 설치된 하나의 파이썬 런타임을 사용하게 되고 동일한 위치에 외부 패키지를 설치하고 서로 공유하게 됩니다.
이럴 경우, 하나의 프로젝트에서 설치한 패키지의 버전이 다른 프로젝트에서 설치한 동일 패키지의 다른 버전과 충동을 일으킬 소지가 생기기 때문에, 프로젝트 별로 독립된 가상 환경을 구성하여 사용하는 것이 권장됩니다.

파이썬에서 외부 패키지를 설치할 때는 일반적으로 pip이라는 패키지 매니저를 사용하는데, 기본적으로 운영체제에 파이썬이 설치된 위치의 site-packages 디렉토리에 안에 설치됩니다.
노드의 npm이나 자바의 maven과 같은 패키지 매니저가 프로젝트 별 패키지 설치를 지원하는 반면에, 아직 파이썬의 pip는 시스템 전역으로만 패키지를 설치할 수 있습니다.
파이썬의 가상 환경을 이용하면 프로젝트 별로 따로 패키지를 설치하고, 다른 프로젝트로 부터 격리시킬 수 있기 때문에 시스템 전역 패키지 설치로 인한 불필요한 이슈를 방지할 수 있습니다.

가상 환경 생성

파이썬 2에서는 virtualenv라는 외부 패키지를 사용해서 가상 환경을 구성했었는데, 파이썬 3.3 부터는 venv 모듈이 내장되기 때문에 별도 패키지 설치없이 파이썬만 설치되어 있으면 바로 가상 환경 구성이 가능하게 되었습니다.

가상 환경을 구성할 프로젝트 디렉토리에 들어가서 아래와 같이 커맨드를 날리면 .venv라는 디렉토리가 생길 것입니다.
여기서 반드시 디렉토리 이름을 .venv로 할 필요는 없지만, 대부분의 파이썬 프로젝트들이 따르는 관행이므로 지켜주시는 게 좋습니다.

1
2
3
4
$ cd <프로젝트 디렉토리>
$ python -m venv .venv
$ ls
.venv

가상 환경을 구지 Git과 같은 소스 버전 관리 시스템에 올릴 필요는 없으므로 .venv 디렉토리를 .gitignore 파일에 추가해줍니다.

1
$ echo '.venv' >> .gitignore

가상 환경 활성화

가상 환경을 활성화 하기 위해서 bin/activate를 실행하면 , 쉘 프롬프트 앞에 (.venv)라고 붙으면서 가상 환경이 활성화 될 것입니다.

1
2
$ . .venv/bin/activate
(.venv) $

. 커맨드가 안 먹는 분들은 source 커맨드를 쓰셔도 됩니다.

1
2
$ source .venv/bin/activate
(.venv) $

이제 which 커맨드를 통해 어떤 파이썬 인터프리터가 사용되는지 확인보겠습니다.
venv 디렉토리 안에 있는 bin/python이 운영체제에 기본 설치된 파이썬 대신에 사용됨을 알 수 있습니다.

1
2
(.venv) $ which python
/Users/dale/temp/my-project/.venv/bin/python

가상 환경에서 제공하는 파이썬의 버전은 다음과 같이 확인할 수 있습니다.

1
2
(.venv) $ python -V
Python 3.7.6

가상 환경에 패키지 설치

가상 환경이 활성화된 상태에서 패키지를 설치하면, .venv 디렉토리 내부에 해당 패키지가 설치됩니다.
즉, 운영체제에 설치되어 있는 파이썬이나 동일 PC내의 다른 파이썬 프로젝트에 아무 영향을 주지 않습니다.

1
(.venv) $ pip install requests

pip show 커맨드로 설치된 패키지의 세부사항을 살펴보면 .venv/lib/python3.7/site-packages에 해당 패키지가 설치되었다는 것을 확인할 수 있습니다.

1
2
3
4
5
6
7
8
9
10
11
$ pip show requests
Name: requests
Version: 2.22.0
Summary: Python HTTP for Humans.
Home-page: http://python-requests.org
Author: Kenneth Reitz
Author-email: me@kennethreitz.org
License: Apache 2.0
Location: /Users/dale/temp/my-project/.venv/lib/python3.7/site-packages
Requires: certifi, chardet, urllib3, idna
Required-by:

가상 환경 비활성화

가상 환경을 빠져나올 떄는 터밀널에 deactivate만 입력해주면 됩니다.
가상 환경이 비활성화 되면 다시 원래대로 운영체제의 기본 파이썬 인터프리터를 사용하게 됩니다.

1
2
3
(.venv) $ deactivate
which python
/usr/local/bin/python3

마치면서

이상으로 파이썬에 기본 내장된 venv 모듈을 이용하여 가상 환경을 관리하는 방법에 대해서 알아보았습니다.
venv를 잘 활용하셔서 파이썬 프로젝트 별로 패키지 관리를 깔끔하게 하셨으면 좋겠습니다.

공유하기