파이썬 가상환경 비교(pipenv, venv, pyenv, conda)
Set-Up

파이썬 가상환경 비교(pipenv, venv, pyenv, conda)

일시불

Table of Contents

🖐귀찮은데 그냥 깔면 안돼요?

파이썬은 같은 인터프리터 버전이라면 같은 패키지를 공유한다. 예를 들어 프로젝트 A와 B에서 Python 3.9.4를 사용하고 있다면, A에서 설치한 패키지를 B에서도 사용할 수 있게 된다. 그런데 만일 프로젝트 A에서는 requests 패키지를 2.25.1 버전으로 사용하고 싶은데 B에서는 2.24.1 버전을 사용하고 싶다면?

# Project A
pip3 install requests==2.25.1

# Project B
pip3 install requests==2.24.1

A에서 설치한 requests 2.25.1 버전은 사라지고 2.24.1 버전만 남게 된다. 이 상황에서 계속 프로젝트 A를 진행한다면 오류가 발생할 수도 있다.

이런 문제를 해결하고자 각 프로젝트마다 별도의 격리된 환경을 생성해 각 프로젝트별로 패키지를 관리하도록 하는 것이 가상환경을 사용하는 이유다.

그럼 뭘 쓸까요?

파이썬 가상환경은 여러 가지가 있는데, 주관적으로 맘에 드는 순서대로 설명해 보겠다.

1. pipenv✨

개인적으로 가상환경을 사용해야 한다면 무조건 pipenv를 사용하고 싶다. 왜냐하면, pipfile.lock 파일을 기반으로 패키지 관리를 하기 때문이고, 그리고 파이썬에서 공식으로 권장하는 가상환경 모듈이기 때문이다.

lock 파일로 패키지 관리를 하면 다음과 같은 장점이 있다.

  • virtualenv로 가상환경을 생성하면서 pip으로 패키지를 자동으로 설치한다.
  • lock파일의 해쉬로 안전한 버전 관리가 가능하다.
  • pip으로 패키지를 설치/추가하면 자동으로 pipfile에 변경사항이 반영된다.

가상환경 생성/제거

pipenv --python 3.X
pipenv --rm

가상환경 실행

# Run shell
pipenv shell

# Rum custom commands
pipenv run COMMANDS...

가상환경 종료

deactivate

패키지 관리

위에서도 말했듯이 lock 파일을 통해 패키지 관리가 이루어진다. 이 lock 파일을 만들기 위한 명세가 바로 pipfile이다. requirements.txt와 비슷하다고 보면 된다.

pipfile은 다음과 같은 구조로 되어있다.

[[source]]
url = "https://pypi.org/simple"
verify_ssl = true
name = "pypi"

[packages]
bs4 = "*"
selenium = "*"
requests = "*"
cloudinary = "*"

[dev-packages]
python-dotenv = "*"

[requires]
python_version = "3.9"

packages는 실제 프로덕션에 사용되는 패키지들의 명세이다. 패키지명 뒤에 "*"과 같이 표시해 항상 최신 버전을 사용할 수 있다. dev-packages는 개발 환경에서만 필요한 패키지를 나타낸다.

가상환경에 패키지를 설치하는 방법과 배포를 위해 현재 설치된 패키지의 lock 파일을 만드는 과정은 다음과 같다.

pipenv install

pipenv lock

2. venv

파이썬에 내장되어 있는 가상환경 모듈이다. PEP 405에서 제안되었고, Python 3.5 이후부터는 파이썬 표준 라이브러리에 들어가 있는 가상환경 생성 방법이다. pip이 내장되어 있어 매우 편리하다.

가상환경 생성

python3 -m venv ENV_NAME

가상환경 실행

source ENV_NAME/bin/activate

가상환경 종료

deactivate

패키지 관리

패키지 관리는 pip과 requirements.txt로 한다.

# 설치
pip3 install -r requirements.txt

# Lock
pip3 freeze > requirements.txt

참고 : PyCharm에서 기본적으로 제공하는 가상환경. 사실 파이참을 사용한다면 반강제적으로 가상환경을 사용할 수밖에 없기는 하다.

3. pyenv-virtualenv

pyenv의 플러그인으로, virtualenv를 이용해 가상환경을 관리해준다. 파이썬 버전을 쉽게 변경할 수 있다는 장점이 있지만 최근에는 많이 사용하지 않고있다.

설치

pip3 install pyenv

가상환경 생성

pyenv virtualenv ENV_NAME

가상환경 실행

pyenv activate ENV_NAME

가상환경 종료

pyenv deactivate

패키지 관리

패키지 관리는 pip과 requirements.txt로 한다.

# 설치
pip3 install -r requirements.txt

# Lock
pip3 freeze > requirements.txt

(optional) 이제 쓰지 마세요

anaconda (conda)

머신러닝, 데이터과학 분야의 다양한 라이브러리들이 설치된 런타임인 아나콘다 파이썬에서 기본적으로 제공되는 가상환경 모듈이다. 하지만 굳이 아나콘다를 사용하기보다 깨끗한 파이썬에 의존성을 새로 설치하는 게 더 가볍고 정확하기 때문에 별로 추천하지는 않는다.

가상환경 생성

conda create -n ENV_NAME python=3.X

가상환경 실행

source activate

가상환경 종료

source deactivate

패키지 관리

패키지 관리는 pip과 requirements.txt로 한다.

# 설치
conda env create -f conda_requirements.txt

# Lock
conda env export > conda_requirements.txt

virtualenv

설치

pip3 install virtualenv

가상환경 생성

virtualenv ENV_NAME

가상환경 실행

source ENV_NAME/bin/activate

가상환경 종료

deactivate

패키지 관리

패키지 관리는 pip과 requirements.txt로 한다.

# 설치
pip3 install -r requirements.txt

# Lock
pip3 freeze > requirements.txt

pyvenv

Python 3.3과 3.4에서 사용하던 가상환경 도구였지만, 3.6 이후부터 사용하지 말 것이 권고되고 있습니다.