개발자

"패키지 마찰의 해결법" Virtualenv와 venv : 파이썬 가상 환경 알아보기

Serdar Yegulalp | InfoWorld 2023.12.05
파이썬이 개발자들에게 높은 인기를 얻는 것은 폭넓고 지금도 계속 확장 중인 서드파티 패키지 때문이다. 데이터 수집과 포맷부터 고속 연산 및 머신 러닝에 이르기까지 모든 작업을 위한 편리한 툴킷을 import 또는 pip install로 언제든 사용할 수 있다.
 
하지만 이러한 패키지가 서로 마찰을 일으키는 경우에는 어떻게 될까? 서로 다른 파이썬 프로젝트에 서로 경쟁하는 애드온 또는 서로 호환되지 않는 버전의 애드온이 필요한 경우에는 어떻게 해야 할까? 그럴 때 파이썬 가상 환경을 사용하면 된다.
 

파이썬 가상 환경이란?

가상 환경은 각기 서로 다른 패키지와 구성을 사용하는 여러 파이썬 인터프리터를 병렬로 실행하는 방법이다. 각 가상 환경에는 별개의 파이썬 인터프리터 사본이 지원 유틸리티 사본과 함께 포함된다.
 
가상 환경에 설치된 패키지는 그 가상 환경에서만 보이며 다른 환경에는 나타나지 않는다. 플랫폼 종속적인 바이너리가 있는 크고 복잡한 여러 패키지도 가상 환경에서 서로 분리할 수 있다.
 

파이썬 가상 환경을 사용하는 이유

가상 환경의 몇 가지 일반적인 사용례는 다음과 같다.
 
  1. 동일한 패키지의 서로 다른 버전에 의존하는 여러 프로젝트를 개발 중이거나, 네임스페이스 충돌로 인해 특정 패키지로부터 격리해야 하는 프로젝트가 있는 경우. 가장 표준적인 사용례다. 
  2. 사이트 패키지 디렉터리를 수정할 수 없는 파이썬 환경에서 작업하는 경우. 관리형 호스팅, 또는 프로덕션 요구사항으로 인해 인터프리터(또는 그 인터프리터에 사용되는 패키지) 선택을 변경할 수 없는 서버와 같이 긴밀하게 통제되는 환경에서 작업할 때가 여기에 해당된다. 
  3. 고도로 통제된 환경에서 특정 패키지 조합을 실험하고자 하는 경우(예를 들어 교차 호환성 또는 하위 호환성을 테스트하기 위해) 
  4. 서드파티 패키지가 없는 시스템에서 “기본” 파이썬 버전을 실행하고, 각 개별 프로젝트를 위한 서드파티 패키지만 필요에 따라 설치하려는 경우.
 
프로젝트의 하위 폴더에 파이썬 라이브러리 압축을 풀고 이렇게 사용해도 되는 것과 마찬가지로, 독립적인 파이썬 인터프리터 사본을 다운로드해서 폴더에 압축을 풀고 이를 사용하여 스크립트와 패키지를 실행할 수는 있다.
 
그러나 이렇게 대충 꿰맞춘 프로젝트는 곧 관리하기가 어려워진다. 처음에는 그 방법이 더 쉬워 ‘보일’ 뿐이다. 바이너리 구성요소가 있거나 정교한 서드파티 종속 항목에 의존하는 패키지를 사용한 작업은 상당히 까다로울 수 있다. 게다가 다른 사람의 시스템이나 새 시스템에 이 환경을 재현하는 것도 쉽지 않은 일이다.
 
장기적으로 최선의 방법은 가상 환경을 만들고 재현하고 다루기 위한 파이썬의 네이티브 메커니즘을 사용하는 것이다. 
 

파이썬 3에서 가상 환경을 사용하는 방법

파이썬에는 이 프로세스 전체를 매우 간단하게 해주는 가상 환경을 위한 네이티브 툴이 있다. 예전과 달리 이제 지원되는 모든 파이썬 버전은 네이티브 가상 환경 툴인 venv를 사용한다.
 

관련 비디오: 파이썬으로 프로그래밍을 쉽게 하는 방법

IT에 완벽한 파이썬은 시스템 자동화부터 머신 러닝과 같은 첨단 분야 작업에 이르기까지 다양한 종류의 작업을 간소화해준다.
 

파이썬 가상 환경 만들기

디렉터리에 가상 환경을 만들려면 다음 구문을 입력한다.
 
python -m venv /path/to/directory

참고로, 시스템에 파이썬 2와 파이썬 3이 모두 있는 경우 python이 아닌 python3를 사용해야 한다. 윈도우에서는 python 대신 py를 사용해서 설치된 파이썬 버전에 안정적으로 액세스할 수 있다(윈도우에서 py 런처를 사용하는 방법에 대한 자세한 내용은 이 기사 참조).
 
가상 환경을 설정하는 프로세스에는 1~2분 정도가 소요된다. 완료되면 디렉터리와 그 디렉터리 안에 몇 개의 하위 디렉터리가 생성된다. 가장 중요한 하위 디렉터리는 유닉스의 경우 bin, 윈도우의 경우 Scripts다. 가상 환경을 위한 파이썬 인터프리터 사본과 관련 유틸리티가 이곳에 위치한다.
 
각 가상 환경에는 자체적인 파이썬 인터프리터 사본이 포함되므로 용량이 커질 수 있다. 파이썬 3.11 가상 환경은 운영체제에 따라 12MB~25MB의 디스크 공간을 소비한다.
 

파이썬 가상 환경 활성화

이 가상 환경을 사용하려면 먼저 명시적으로 활성화해야 한다. 활성화하면 셸 세션이 지속되는 동안 가상 환경이 기본 파이썬 인터프리터가 된다.
 
사용 중인 운영체제 및 명령 셸에 따라 가상 환경을 활성화하는 데 사용해야 하는 구문도 다르다.

•    유닉스 또는 맥OS에서 bash 셸 사용 시 : source /path/to/venv/bin/activate
•    유닉스 또는 맥OS에서 csh 셸 사용 시 : source /path/to/venv/bin/activate.csh
•    유닉스 또는 맥OS에서 fish 셸 사용 시 : source /path/to/venv/bin/activate.fish
•    윈도우에서 명령 프롬프트 사용 시 : path\to\venv\Scripts\activate.bat
•    윈도우에서 파워셸 사용 시 : path\to\venv\Scripts\Activate.ps1
 
참고로 활성화된 환경은 그 환경이 활성화된 컨텍스트에 대해서만 작동한다. 예를 들어 파워셸 인스턴스 A와 B를 실행하고 인스턴스 A에서만 가상 환경을 활성화하면 해당 환경은 A에만 적용되고 다른 인스턴스에는 적용되지 않는다. 
 
많은 파이썬 IDE는 현재 프로젝트 디렉터리에서 가상 환경이 발견되면 자동으로 이를 감지하고 활성화한다. 예를 들어 비주얼 스튜디오 코드에서는 파이썬 확장이 설정된 경우 이 자동 기능이 수행된다. 비주얼 스튜디오 코드 내에서 터미널을 열면 선택된 가상 환경이 자동으로 활성화된다. 파이참(PyCharm)은 각각의 새 프로젝트에 대해 가상 환경을 자동으로 생성한다.
 

파이썬 가상 환경 구성 및 사용

새 가상 환경을 활성화하고 나면 pip 패키지 관리자를 사용해서 패키지를 추가 및 변경할 수 있다. pip는 윈도우 가상 환경에서는 Scripts 하위 디렉터리, 유닉스 OS에서는 bin 하위 디렉터리에 위치한다.
 
pip 작동 방식에 이미 익숙하다면 바로 시작하면 된다. 가상 환경에서도 똑같다. 다만 가상 환경이 활성화된 컨텍스트(예를 들어 bash 세션 또는 윈도우 CLI/파워셸 세션)에서 가상 환경에 대한 패키지를 관리하는 pip 인스턴스를 사용해야 한다는 점만 확실히 해 두면 된다. 올바른 pip 와 가상 환경을 사용하고 있는지 확인하려면 pip -V를 입력해서 표시되는 경로가 가상 환경의 하위 디렉터리를 가리키는지 확인한다.
 
가상 환경에서 pip를 업그레이드하려면 python -m pip install -U pip 명령을 사용하는 것이 가장 좋다. 이 명령을 사용하면 파이썬이 중요한 파일을 잠그지 않도록 하면서 업그레이드 프로세스가 진행된다. pip install -U pip 명령으로는 업그레이드를 제대로 완료하지 못할 수 있다.
 
파이썬 스크립트를 실행하기 위해 만든 가상 환경을 사용하려면 해당 환경을 활성화한 컨텍스트의 명령줄에서 파이썬을 호출하기만 하면 된다. 예를 들어 스크립트를 실행하려면 python myscript.py를 실행한다.
 
파이참의 경우 IDE의 자체 패키지 관리 인터페이스를 사용해서 프로젝트에 설치된 패키지를 관리할 수 있다.
 

파이썬 가상 환경의 패키지 관리

새 가상 환경을 만들면 pip 및 setuptools 패키지가 설치되지만 그게 전부다. 환경에서 사용하려는 다른 패키지는 직접 설치해야 한다. 요구사항이 복잡한 프로젝트의 경우 프로젝트 루트에 프로젝트의 요구사항이 나열된 requirements.txt 파일을 유지해야 한다. 이렇게 하면 가상 환경을 다시 만들어야 할 때 pip install -r requirements.txt 명령을 사용해서 필요한 모든 패키지를 다시 설치할 수 있다.
 
최근에는 파이썬 프로젝트를 위한 새로운 프로젝트 메타데이터 형식인 pyproject.toml이 등장했다. pyproject.toml 파일에는 프로젝트의 패키지 요구사항뿐만 아니라 다른 다양한 관련 정보도 포함된다. 이러한 요구사항을 설치하려면 pyproject.toml 파일과 같은 디렉터리에서 pip install .을 실행한다.
 
참고로, 가상 환경의 pip 및 setuptools 사본은 해당 가상 환경의 로컬 사본이다. 각 가상 환경에는 자체 사본이 있으며 각기 별도로 업데이트 및 유지해야 한다. pip가 업데이트되지 않았다는 경고가 전체가 아닌 일부 가상 환경에서만 뜨는 이유도 여기에 있다. 각 가상 환경마다 따로 pip를 업데이트해야 한다.
 

파이썬 가상 환경 비활성화

가상 환경 사용을 마친 다음에는 해당 환경을 사용했던 세션을 종료하면 된다. 같은 세션에서 작업을 계속하되 대신 기본 파이썬 인터프리터를 사용하려면 프롬프트에 deactivate를 입력한다. 명령줄을 사용하는 윈도우 사용자는 Scripts 하위 디렉터리의 deactivate.bat를 실행해야 하고, 유닉스 사용자 및 파워셸을 사용하는 윈도우 사용자는 어느 디렉터리에서나 deactivate만 입력하면 된다.
 

파이썬 가상 환경 제거

가상 환경은 독립체이므로 가상 환경이 더 이상 필요 없으면 디렉터리를 삭제하면 된다. 단, 가상 환경을 사용하는 실행 중인 파이썬 사본을 먼저 클론해야 한다.
 

파이썬 가상 환경 옮기기

가상 환경을 프로젝트와 함께 복사하고 옮길 수 있다고 생각하기 쉽다. 그러나 그렇게 하면 안 된다. 가상 환경은 그 환경이 만들어진 시스템의 파이썬 설치 위치와 연계된다. 프로젝트를 다른 시스템으로 옮기려면 venv 디렉터리는 그대로 두고 대상 시스템에 venv를 다시 만든다. 프로젝트와 함께 requirements.txt 또는 pyproject.toml 파일을 복사 및 이동해야 한다. 다른 시스템에 venv를 다시 만들기 위해서는 이 두 파일이 필요하기 때문이다.
 

파이썬 2에서 가상 환경을 사용하는 방법

파이썬 2에서 가상 환경은 파이썬의 네이티브 기능이 아니므로 서드파티 라이브러리를 설치해서 가상 환경을 만들고 관리해야 한다.
 
가장 인기 있고 폭넓게 사용되는 프로젝트는 디렉터리 구조를 만들고 필요한 파일을 가상 환경으로 옮기는 역할을 하는 virtualenv다. virtualenv를 설치하려면 pip install virtualenv를 사용하면 된다. 가상 환경 디렉터리를 함께 만들려면 virtualenv /path/to/directory를 입력한다. 가상 환경을 활성화하고 비활성화하는 방법은 파이썬 3의 가상 환경과 동일하다(위 참조).
 
참고로 새 개발에는 파이썬 2를 사용하면 안 된다. 파이썬 2의 가상 환경은 파이썬 2 자체와 마찬가지로 레거시 프로젝트의 유지보수 용도로만 사용해야 한다. 또한 궁극적으로는 이러한 레거시 프로젝트를 파이썬 3로 마이그레이션해야 한다.
 

파이썬 가상 환경을 주피터 노트북과 함께 사용하기

주피터(Jupyter) 노트북(아이파이썬 노트북이라고도 함)을 사용 중이고 시스템에 이미 주피터가 설치돼 있다면 가상 환경을 만들고 활성화한다. 그런 다음 가상 환경 디렉터리에서 pip install ipykernel을 실행해 아이파이썬에 필요한 구성요소를 추가한다. 마지막으로 ipython kernel install —user —name=<project_name>을 실행한다. 여기서 project_name은 해당 프로젝트에 사용할 이름이다. 이렇게 하면 주피터를 실행하고 가상 환경 내에 설치한 아이파이썬 커널로 전환할 수 있다.
 

파이썬 가상 환경 업그레이드

시스템의 파이썬 런타임을 업그레이드할 때 해당 버전의 파이썬을 사용하는 가상 환경은 자동으로 업그레이드되지 않으므로 직접 해야 한다. 의도적으로 그렇게 설계된 것이다. 무심코 파이썬 버전을 업그레이드하는 경우 부대 패키지가 손상될 수 있기 때문이다.
 
기존 파이썬 인터프리터의 마이너 포인트를 업그레이드한 경우(예를 들어 파이썬 3.11.1에서 3.11.3으로) 해당 가상 환경을 손쉽게 업그레이드할 수 있다. 프로젝트 디렉터리의 명령 프롬프트에서 다음을 입력한다.
 
python -m venv /path/to/venv --upgrade

이보다 앞서 가상 환경을 활성화하면 안된다. 미리 활성화할 경우 업그레이드가 작동하지 않을 수 있다. 
 
또는 venv를 완전히 제거하고 requirements.txt 또는 pyproject.toml 파일을 사용하여 다시 만드는 방법도 있다.
 
새 메이저 버전의 파이썬 설치한 경우(예를 들어 파이썬 3.10이 이미 있는 상태에서 파이썬 3.11을 설치한 경우) 새 메이저 포인트 버전을 사용하는 새 가상 환경을 만들어야 한다. 기존 가상 환경을 상위 메이저 포인트 버전의 파이썬으로 업그레이드하려고 시도하면 안 된다.
editor@itworld.co.kr 
Sponsored

회사명 : 한국IDG | 제호: ITWorld | 주소 : 서울시 중구 세종대로 23, 4층 우)04512
| 등록번호 : 서울 아00743 등록발행일자 : 2009년 01월 19일

발행인 : 박형미 | 편집인 : 박재곤 | 청소년보호책임자 : 한정규
| 사업자 등록번호 : 214-87-22467 Tel : 02-558-6950

Copyright © 2024 International Data Group. All rights reserved.