프로그래밍 언어/Python

[Python] 파이썬 가상환경(venv) 종류 및 사용법 정리

호무비 2022. 6. 30. 21:02
반응형

오늘은 파이썬 가상환경과 그 종류 및 사용법에 관해 알아보겠습니다.

 

파이썬에는 여러 가상환경 만드는 방법을 제공하고 있는데, 처음 접해보면 헷갈리고 어려운 면이 있습니다. 관련된 자료가 많지 않아 이렇게 글을 작성하게 되었습니다.


파이썬 가상환경

 

가상환경을 사용하기에 앞서 먼저 그 내용에 대해 간략히 소개하도록 하겠습니다.

 

프로젝트를 진행하다 보면 여러 모듈을 설치하게 되는데요, 각 모듈은 서로 의존성(dependency)을 가지는 경우가 많기 때문에 글로벌하게 모듈을 설치하게 되면 여러 프로젝트를 관리하기 어렵습니다.

 

예를 들어 프로젝트1에서는 A, B, 프로젝트2에서는 A, C라는 모듈을 사용하는 상황을 생각해봅시다. 여기에서 B는 A가 1.x 버전이고, C는 A가 2.x 버전이어야 사용 가능하다고 해봅시다. 모듈을 글로벌 환경에 설치한다면 A는 1.x 또는 2.x 둘 중 하나만 설치할 수 있으므로 두 프로젝트를 모두 관리할 수 없습니다.

 

따라서, 각각의 프로젝트에 필요한 모듈을 별도의 로컬 환경에 설치하여 사용하게 되는데, 이를 가상환경이라고 합니다.

 

아마 node.js의 npm 모듈을 사용해보신 분들은 이러한 구조에 익숙하실 것 같은데요, 파이썬 가상환경도 같은 원리입니다.

 

파이썬은 일반적으로 pip를 이용하여 모듈을 설치하는데요, 이는 npm과 유사하지만, 중요한 차이점이 있습니다. npm은 자동으로 로컬 환경에 모듈을 설치하지만, pip는 글로벌 환경에 설치한다는 점입니다. 이 때문에, 별도로 가상환경이라는 개념을 적용하게 된 것입니다.

 

초창기 파이썬에서는 가상환경을 공식적으로 지원해주지 않다 보니(현재에는 지원하고 있습니다.) 여러 가지 표준/비표준 라이브러리가 사용되고 있습니다. 따라서, 가상환경의 종류에 대해 간단히 소개해 드리고, 그중 가장 대표적인 venv의 사용법에 관해 설명해 드리도록 하겠습니다.


파이썬 가상환경 종류

 

앞서 언급했듯이, 파이썬 표준 라이브러리에서 지원하는 가상환경이 있고 그렇지 않은 것이 있는데, 양쪽 모두 소개하도록 하겠습니다. 표준 라이브러리는 설치 없이 사용할 수 있지만, 비표준 라이브러리는 별도 설치가 필요합니다.

 

비표준 라이브러리

1. virtualenv

비표준 라이브러리 가운데, 가장 많이 사용하는 가상환경 라이브러리입니다. 표준 라이브러리는 아니지만 PyPA에서 공인된 라이브러리입니다. 아래에서 소개할 venv와 사용법이 유사하지만, Python 2, 3을 모두 지원한다는 장점 때문에 많이 사용합니다.

 

2. pyenv

파이썬 버전별로 환경 생성이 가능한 라이브러리입니다. 가상환경은 virtualenv 등을 통해 별도로 생성해주어야 합니다. 즉, 파이썬 버전 관리 기능을 제공해준다고 생각할 수 있습니다. Windows를 지원하지 않습니다.

 

3. pyenv-virtualenv

pyenv를 위한 플러그인입니다. pyenv와 virtualenv를 동시에 사용할 수 있도록 해줍니다.

 

4. virtualenvwrapper

virtualenv에 대한 익스텐션 모음입니다. virtualenv를 사용할 때 번거로웠던 부분들을 편하게 사용할 수 있도록 해줍니다.

 

5. pyenv-virtualenvwrapper

pyenv를 위한 플러그인입니다. pyenv와 virtualenvwrapper를 편하게 통합하여 사용할 수 있도록 해줍니다.

 

6. pipenv

Pipfile, pip, virtualenv를 하나의 커맨드로 실행할 수 있도록 하는 라이브러리입니다. pip 명령어 대신 pipenv 명령어로 모듈을 설치하면 루트 디렉토리에 가상환경이 생성됩니다. 실행할 때도 pipenv 명령어를 사용하여 가상환경에서 작업을 수행합니다.

 

표준 라이브러리

1. pyvenv

venv과 거의 유사한 가상환경 라이브러리입니다. Python 3.3에서 추가되었으나, Python 3.8에서 제거되었습니다. 아마도 pyenv와 이름이 유사하여 혼란을 피하고자 venv로 기능을 옮긴 후 삭제된 것이 아닌가 싶습니다.

 

2. venv

Python 3.3부터 사용가능한 가상환경 라이브러리입니다. 현재 기준으로 유일하게 표준 라이브러리에서 지원하는 가상환경 라이브러리입니다. 앞서 소개한 virtualenv의 경량화 모듈로 생각할 수 있으며, 실제로 두 라이브러리는 상당히 유사합니다. venv는 Python 2.x가 지원되지 않는 등, virtualenv보다 기능적으로는 조금 부족하지만, 별도 설치 없이 표준 라이브러리로 제공된다는 점에서 많이 사용합니다.

 

그 외에도 아나콘다를 통해 가상환경을 구축하는 등 여러 가지 방법이 있습니다. 일반적으로는 위에서 소개한 virtualenv이나 venv를 통해 원하는 작업을 수행하는 것이 가능하니, 추가로 필요한 내용은 직접 찾아보시면 좋겠습니다.

 

가상환경 종류에 관해서는 아래의 자료를 참고하였습니다. 더 자세한 내용이 궁금하시다면 영어 원문을 참고해주세요.

 

https://stackoverflow.com/questions/41573587/what-is-the-difference-between-venv-pyvenv-pyenv-virtualenv-virtualenvwrappe

 

What is the difference between venv, pyvenv, pyenv, virtualenv, virtualenvwrapper, pipenv, etc?

Python 3.3 includes in its standard library the new package venv. What does it do, and how does it differ from all the other packages that match the regex (py)?(v|virtual|pip)?env?

stackoverflow.com

 

반응형

venv 사용법

 

venv 사용법에 대해 소개하도록 하겠습니다. 모든 명령어는 프로젝트의 루트 디렉토리 터미널에서 실행시켜주어야 합니다.

 

1. 가상환경 생성

python -m venv 가상환경이름

먼저 가상환경을 생성하는 방법입니다. 위와 같이 가상환경 이름을 명시해주고 실행합니다. 가상환경이 잘 생성되었다면 루트 디렉토리에 해당 이름으로 폴더가 생성됩니다. 일반적으로 가상환경 이름은 .venv로 정하는 것이 관례입니다.

 

가상환경 디렉토리 구성

생성된 가상환경 디렉토리(.venv)를 보면 Incldue, Lib, Scripts, pyvenv.cfg로 구성됩니다. 여기에서 Lib에 설치한 모듈이 저장됩니다.

 

모듈 목록

 

2. 가상환경 활성화

1) Windows (cmd)

call 가상환경이름/Scripts/activate

2) Linux

source 가상환경이름/Scripts/activate

실행할 가상환경 이름을 명시해주고 명령어를 실행합니다. 이름을 명시한다는 것은 하나의 루트 디렉토리에 여러 개의 가상환경을 만들고, 원하는 것을 활성화하여 프로그램을 실행할 수도 있다는 것입니다.

 

종종 찾아보다 보면 activate 하는 코드 위치가 Scripts가 아니라 bin으로 되어 있는 경우가 있습니다. 생성된 가상환경 폴더 구조를 잘 살펴보시고 상황에 따라 작업하시기 바랍니다.

 

또한, 다른 자료를 보면 source로 실행하도록 설명되어 있는 경우가 많은데요, 윈도우 환경에서는 해당 명령어를 지원하지 않으니 call 명령어를 대신 사용하시면 됩니다.

 

가상환경 터미널

가상환경을 활성화하면 위와 같이 커맨드 라인 좌측에 가상환경 이름이 표시됩니다.

 

3. 가상환경 모듈 설치

이제 가상환경 내에 모듈을 설치해보도록 하겠습니다. 가상환경 내에 설치될 뿐, 설치하는 방법이나 과정은 글로벌 환경에서 설치하는 것과 같습니다.

 

예를 들어 numpy 모듈을 설치한다면 pip install numpy로 설치할 수 있습니다. requirements.txt 파일이 있다면 pip install -r requirements.txt 명령어로 모듈을 설치하시면 됩니다.

 

numpy 모듈 추가

Lib 폴더에 numpy 모듈이 추가된 것을 확인할 수 있습니다.

 

간단하게 다음과 같은 코드를 작성하여 numpy의 sort 기능을 테스트해보았습니다.

 

import numpy as np

dataList = [1, 3, 5, 4, 2]
numpyarr = np.array(dataList)
print(np.sort(numpyarr))

 

설치한 numpy 모듈을 실행한 결과는 다음과 같습니다. 동작을 잘 수행하는 것을 확인할 수 있습니다.

 

numpy 코드 실행 결과

 

4. 가상환경 비활성화

deactivate

가상환경을 더 이상 사용하지 않을 것이라면 위의 명령어로 비활성화해줍니다. 해당 명령을 수행하면 가상환경을 빠져나와 일반 터미널로 돌아갑니다.

 

5. 가상환경 삭제

아나콘다를 사용하시던 분들은 가상환경 삭제 명령어를 찾지 못해 혼란스러워하시는 경우가 종종 있는데요, 가상환경을 삭제하고 싶다면 해당 폴더를 지우면 됩니다.

 

virtualenv도 venv과 거의 같은 방식으로 적용할 수 있으니 상황에 따라 적절히 사용하시기를 바랍니다.


파이썬 가상환경에 대해 자세히 알아봤습니다. 제가 여기에서 소개한 것은 venv를 사용한 방식이지만, 각자 필요한 기능이 조금씩 다를 수 있습니다. 다른 가상환경도 비슷한 방식으로 적용할 수 있으니 필요에 맞게 선택하시기 바랍니다.

 

직접 조사해서 작성하는 글이다 보니 일부 정확하지 않은 정보가 포함되어 있을 수 있습니다.

궁금한 사항이나 잘못된 내용이 있으면 댓글로 알려주세요~

구독과 좋아요, 환영합니다!

 

반응형