Python venv 사용법 - Python venv sayongbeob

파이썬 가상 환경이란?

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

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

가상 환경 생성

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

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

$ cd <프로젝트 디렉터리>
$ python -m venv .venv
$ ls
.venv

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

$ echo '.venv' >> .gitignore

가상 환경 활성화

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

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

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

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

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

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

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

(.venv) $ python -V
Python 3.7.6

가상 환경에 패키지 설치

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

(.venv) $ pip install requests

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

$ 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: 
License: Apache 2.0
Location: /Users/dale/temp/my-project/.venv/lib/python3.7/site-packages
Requires: certifi, chardet, urllib3, idna
Required-by:

가상 환경 비활성화

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

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

마치면서

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

Python의 virtualenv는 어플리케이션별로 독립된 가상 환경을 사용할 수 있게 해줍니다.

어플리케이션별로 독립된 가상 환경이 왜 필요할까?

예를 들어보겠습니다.

하나의 PC 혹은 서버 환경에서 어떤 어플리케이션은 버전 1의 라이브러리를 필요로 하고, 다른 어플리케이션은 버전 2의 라이브러리를 필요로 한다면, 어떻게 이 두 라이브러리를 관리할 수 있을까요? Host 파이썬에 각각 다른 두 패키지를 설치하려고 한다면 당연히 conflict가 발생할 것입니다.

혹은, 잘 작동하고 있는 특정 어플리케이션의 환경을 그대로 유지하고 싶은 경우를 생각해봅시다. 해당 프로그램에서 쓰고 있는 라이브러리의 버전의 변경이 Host 머신에서 일어난다면, 그동안 잘 돌던 프로그램에서 장애를 일으킬 수도 있습니다.

위와 같은 모든 케이스를 해결해주는 것이 virtualenv입니다.
하나의 PC 혹은 서버 안에서 virtualenv를 설정하고, 그 환경 안에서는 Host 환경과 별도로 각각 필요한 Python 버전을 관리하고, 필요한 특정 버전의 라이브러리를 관리할 수 있게 해줍니다.

한 서버 안에 여러 virtualenv 환경 설정을 통해 각각 독립된 버전 관리를 가능하게 해준다.

virtualenv 설정하기

  1. virtualenv 설치
    python3 -m pip install --user -U virtualenv
python3 -m pip install --user -U virtualenv

2. 독립된 파이썬 환경 만들기
환경을 만들고자 하는 경로로 이동하여 수행합니다.
cd [환경을 만들고자 하는 경로]
virtualenv env

virtualenv env

3. 가상 환경 활성화
가상환경을 활성화하고자 하는 경로 내에서 수행합니다.
cd [환경을 만들고자 하는 경로]
Linux/Mac OS :source env/bin/activate
Windows : .\my_env\Scripts\activate

가상 환경이 활성화 되면 위와 같이 명령창 앞에 (env) 가 뜹니다.

3. 가상 환경 내 패키지 설치
가상환경이 활성화 된 상태 -(env) 가 활성화된 상태에서 pip 명령을 통해 설치하면 가상환경 내에만 패키지가 설치됩니다.
- 예시 )pip3 install numpy pandas scipy scikit-learn

4. 가상 환경 비활성화
deactivate 명령을 통해 비활성화 할 수 있습니다.

virtualenv vs venv

virtualenv와 venv의 차이는 뭘까요?
기본적으로는 같은 기능을 합니다. 만약 쓰시던 것이 있다면 익숙한 것으로 쓰면 됩니다.

다만 작은 차이들은 있습니다.

  • 가장 큰 차이는 venv는 Python 3.3부터 venv module로 standard library로 포함되어 있어 별도의 설치 과정이 필요 없다는 점입니다.
    virtualenv는 위에서 진행한 것 처럼 별도의 설치 과정이 필요합니다.
  • venv 모듈은 virtualenv의 경량화된 모듈입니다. 그래서 virtualenv의 모든 기능을 제공하지는 않습니다.
    몇가지만 예를 들면 :
  • venv는 virtualenv보다 느립니다.(`app-data` seed method가 없기 때문에)
  • 확장성(extendable)이 virtualenv만큼은 아닙니다.
  • 가상환경을 파이썬 버전별로 임의로 만들 수 없습니다. (cannot create virtual environments for arbitrarily installed python versions)
  • pip를 통해서 업그레이드할 수 없습니다.

Refrences

https://virtualenv.pypa.io/en/latest/
https://docs.python.org/3/library/venv.html