본문 바로가기
SW 개발/Python

Python 가상환경(Virtual Environment) 만들기 위한 virtualenv 명령어 및 실행 예제

by Kibua20 2021. 8. 24.

Python은 2.x 버전부터 3.10 버전까지 개발되어 있습니다.  2.x버전과 3.x 버전에는 문법에 있어 많은 변경이 있었고, Python 3.x 버전에서도 기본적은 문법은 동일하나 함수 paramter 등의 변화가 있었습니다.  Python은 1~2년 주기로 Major 버전 업그레이드가 진행되기 때문에 프로젝트를 진행할 때에는 일반적으로 과거의 특정 버전을 기준으로 개발합니다.

 

각 Python 버전 간의 차이로 발생하는 종속성 문제점을 해결하기 위해서 "가상 환경 virtualenv"를 지원합니다.  가상 환경은 아래와 같은 경우에 유용하게 사용합니다.

 

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

 

Python 가상 환경(virtualenv) 란

시스템에 설치된 python에 버전과 별도로 특정 python 버전의 가상 환경을 만들어,  python 실행 파일, 라이브러리의 설치 위치를 분리하는 것입니다. 이는 기존 시스템에 영향을 주지 않도록 설계되어 있고, 라이브러리가 종속성을 문제를 해결할 수 있습니다.

 

virtualenv 설치   

가상 환경은 Python 표준 라이브러리인 virtualenv를 설치해야 합니다.  터미널에서 virtualenv를 실행해보고 설치가 안되어 있으면 Python 패키지 매니저 pip로 설치합니다.  

 

$ pip3 install virtualenv

virtualenv 설치

 

가상 환경 생성 (vitualenv my-venv) 

가상 환경은 생성은 $virtualenv my-venv 명령어로 생성합니다.   virtualenv 실행하면 기본적으로 시스템에 default로 설정된 python 버전을 기반으로 my-venv폴더를 생성합니다.  제 PC 환경에서는 시스템에  python 3.9, pip 21.2.3,  setuptools=5..4.0, wheel 0.37.0 버전을 기반으로 가생 환경이 생성되어, 실행 파일 및 라이브러리가 my-venv 폴더 하위에 복사됩니다  기존에 설치된 가상 환경을 삭제하고자 하는 경우 가상 환경 폴더(my-venv)만 삭제하면 됩니다.

 

$ virtualenv my-venv

가상 환경 생성 (vitualenv my-venv)

 

가상 환경의 생성 결과를 확인하면 다음과 같습니다.  virtualenv를 실행한 위치에서  인자로 전달한 my-venv 폴더가 생성되고 그 하위 폴더에 필요한 실행파일들이 복사됩니다.

가상 환경 생성 (vitualenv my-venv) 결과 확인

 

virutal env 삭제

더 이상 사용하지 않는 가상 환경이나 잘못 만든 경우 가상 환경의 폴더만 삭제하면 됩니다. 

$ rm -rf my-venv

 

가상 환경에서 특정 Python 버전 지정

가상 환경에서 Python 특정 버전을 지정하는 경우 $ virtualenv --python=<python path>를 명령어를 사용합니다.  예를 들어 system의 Python default 버전은 3.9 버전이고, /usr/bin/python3 은 Python 3.8 버전인 경우 --python 인자에 가상 환경에 맞는 Python 버전을 지정합니다.  

 

# python 2

$ python -m virtualenv my-venv

$ virtualenv my-venv --python=python

$ virtualenv venv --python=python2.7

 

# python 3

$ python3 -m virtualenv my-venv

$ virtualenv my-venv --python=python3

$ virtualenv my-venv --python=python3.5

$ virtualenv my-venv --python=/usr/bin/python3

 

 

Python 3.8 (/usr/bin/python3)으로 설정한 가상 환경 결과는 다음과 같습니다. Python 실행파일, pip, wheel 등이 Python 3.8 버전으로 /my-venv 폴더로 복사되었습니다. 

Python 3.8 (/usr/bin/python3)으로 설정한 가상환경 결과

 

가상 환경 활성화(시작)

가상 환경 시작은 $ my-venv/bin/activate를 실행합니다.  가상 환경을 활성화하면 터미널에서 가상 환경 이름의 폴더 앞에 붙습니다.  아래 예제에서는 (my-venv) kibua20 % 와 같이 변경됩니다. 

 

$ source my-venv/bin/activate

 

가상 환경을 실행하고 python, python3의 위치를 확인하면 가상 환경 폴더(my-venv)에 위치한 python과 python3으로 연결되어 있고, Python 버전은 가상 환경 생성 시 설정한 Python 3.8입니다.

가상 환경 시작

리눅스 계열의 우분투나 MacOS, WSL에서는 source 명령어를 사용하지만,  Windows에서는 call 명령어를 대신 사용합니다. 

$  call my-venv/bin/activate

 

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

가상 환경 비활성화(종료)는 (my-venv) $ deactivate를 실행합니다.  deactivate() 함수는 아래와 같이 shell script에 정의되어 있고, 고, $ deactivate  실행 후 터미널 프롬프트에서 가상 환경 이름이 없어지고, python3 명령어는 시스템의 기본 python 버전인 3.9로 설정됩니다. 

 

(my-venv) $ deactivate 

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

 

가상 환경에서 Python 패키지 설치

가상 환경에서 필요한 패키를 설치합니다.  예를 들어 requests 모듈을 설치하는 경우 관련된 패키지 파일을 다운로드하고, wheel로 설치합니다.  가상 환경에서 패키지 설치는  my-venv 하위에 lib 폴더에 설치됩니다. 

 

(my-venv)$ pip install  requests

가상 환경에서 Python 패키지 설치

 

가상 환경에서 requirments.txt 파일 만들기

가상 환경에 설치한 패키지를 $ pip freeze 명령어로  requirements.txt 포맷으로 저장합니다. 추후 개발한 Python 패키지를 배포하는 경우 requirements.txt에 있는 버전으로 기준으로 종속성을 확인하고 배포 시스템에 설치합니다.  이는 도커나 상용 클라우드에서 자주 사용합니다.

 

(venv) $ pip freeze

(venv) $ pip freeze > requirements.txt

가상환경에서 requirments.txt 파일 만들기

가상 환경에서 requirments.txt 에서 선언된 패키지 설치하기

가상 환경에 설치한 패키지를  requirements.txt에 정리가 되었으면, 다른 가상 환경에서 requirements.txt 파일을 기준으로 "-r" 옵션 설치가능합니다.

 

$ pip install -r requirements.txt

 

관련 글:

[SW 개발/Python] - Python 2.x에서 3.x으로 코드 자동 변환: 2to3 와 __future__ 사용

[SW 개발/Data 분석 (RDB, NoSQL, Dataframe)] - Python으로 Web 기반 Chart 구현하기: plotly & dash 라이브러리

[SW 개발/Python] - Python Decorator를 이용한 함수 실행 시간 측정 방법 (Sample code)

[SW 개발/Data 분석 (RDB, NoSQL, Dataframe)] - Python Pandas로 Excel과 CSV 파일 입출력 방법

[SW 개발/Python] - Python: JSON 개념과 json 모듈 사용법

[SW 개발/Data 분석 (RDB, NoSQL, Dataframe)] - Python Selenium과 BeautifulSoup을 활용하여 Google PlayStore 사용자 리뷰 (댓글) 가져오기 (Sample Code 포함)

[SW 개발/Python] - Python 정규식(Regular Expression) re 모듈 사용법 및 예제

[SW 개발/Python] - Python에서 URL 한글 깨짐 현상: quote_plus()와 unquote_plus()

[SW 개발/Python] - Python: xmltodict를 활용하여 XML를 JSON으로 변환하는 방법




댓글