[python]Virtualenv를 이용한 개발환경 분리 및 패키지 관리

Virtualenv란?

Virtualenv는 하나의 서버 인스턴스에서 여러개의 파이썬 버전별 혹은 여러개의 프로젝트 별 종속성 문제를 해결하기 위해 설치하는 일종의 python 가상환경이며, 주로 아래의 케이스에서 많이 유용합니다.

  • 개발 서버에서 설치된 python verion과 별도의 project를 진행 
  • 동시에 여러 Python 프로젝트를 진행하는 경우 각 버전의 차이가 있는 경우 
  • 오래된 Python Project에서 Python 버전은 유지하면 기능을 업그레이드하는 경우
  • 상용 클라우드 (AWS, MS Azure, Google Cloud) 등에서 개발할 때 최신 Python 버전을 지원하지 못하는 경우

virtualenv 환경 구성

우선 virtualenv를 설치해보도록 하겠습니다. pip를 이용해 설치를 할 수 있습니다.

$ pip install virtualenv

가상 환경 생성

virtualenv는 기본적으로 시스템의 default python버전을 기반으로 생성 되며, 생성 시 실행 파일 및 라이브러리가 생성되는 가상환경 디렉토리에 python 모듈이 복사되는 형식으로 생성 됩니다.

$ virtualenv py3.8-env

설치를 하고 나서 디렉티로의 구조를 보면 아래의 그림과 같습니다.

virtual env 삭제

가상환경 생성을 잘못 했거나 더 이상 사용하지 않을 경우 아래의 명령어로 삭제할 수 있습니다. 결국 디렉토리 자체를 지우는 형식 입니다.

$ rm-rf py3.8-env

가상 환경에서 특정 Python 버전 지정(3버전 이상)

가상 환경이 특정한 python 버전을 사용 해야 하는 경우 아래의 명령어로 해당 버전을 지정 해 줄 수 있으며, 이는 로컬 개발환경에서 특히 여러개의 프로젝트를 다른 버전의 python으로 개발을 진행 할 떄 유용할 수 있습니다.

$ virtualenv py3.8-env --python=${installed-python-path}/bin/python3

가상 환경 활성화(시작)

다음으로 가상 환경을 실행 해보도록 하겠습니다.

$ source py3.8-env/bin/activate

명령어를 실행하면 아래의 그림에서 보듯이 터미널 앞에 접두어가 추가되어 shell이 수행 됨을 알 수 있습니다.

또한 실행되는 python3 명령어도 가상 환경 내부로 복사 된 위치의 python이 실행이 되는 것을 알 수 있습니다.

가상 환경 비활성화 (종료)

가상환경을 종료 하고 싶을 때는 다음의 명령어를 수행하여, 지금 수행중인 가상환경을 종료하고 다른 가상환경으로 쉽게 이동이 가능합니다.

$ deactivate

가상 환경에서 패키지 설치

이제 가상환경에서 특정 패키지를 설치 해 보도록 하겠습니다. requests 패키지를 임시로 새로 생성한 가상환경에서 설치해보겠습니다. pip를 이용해서 설치 할 수 있으며 다음과 같습니다.

$ pip install requests

requests 패키지가 가상 환경 내의 lib 하위 디렉토리에 설치된 것을 확인 할 수 있습니다.

requriements.txt 만들기

가상환경에서 pip freeze를 이용하여 현재 설치 되어 있는 패키지 목록을 운영 환경 혹은 다른 환경으로 옮겨야 하는 경우 굉장히 유용하게 사용할 수 있습니다.

$ pip freeze > requriements.txt

설치된 패키지와 버전이 나오며 해당 목록이 requriements.txt에 저장 되었고, 이를 설치가 필요한 다른 환경에서 다음의 명령으로 패키지를 일괄적으로 설치하여 관리가 가능합니다.

$ pip install -r requriements.txt

Conclusion

virtualenv는 로컬에서 여러 파이썬 프로젝트를 각각의 독립된 파이썬 버전 환경에서 개발 하기 위해 굉장히 유용한 도구이며, 특히 파이썬 버전 지원에 제한이 있는 클라우드 환경에서 유용하게 사용 되어질 수 있습니다. 또한 개발 환경에서 필요하여 설치된 패키지의 의존성을 잘 확인하여 배포할 수 있는 점도 있습니다. 하지만, poetry와 겹치는 부분이 있어 poetry를 분석하여 비교하고 사용 편이 좋을 것 같습니다.

Leave a Comment