카테고리 없음

[Python] 파이썬의 venv 모듈로 가상 환경 사용하기

jolocal 2024. 8. 9. 09:21
728x90

의존성 충돌 문제

하나의 컴퓨터 상에서 Python으로 개발된 여러 개의 프로젝트 돌리는 경우 프로젝트 간에 의존성(dependency) 충돌이 발생하기 쉬운데요.

 

예를 들어서 프로젝트 A에서 Django 패키지 3.x 버전을 사용하는데, 프로젝트 B에서 Django 패키지를 4.x 버전을 사용하고 있다면, 둘 중 하나의 프로젝트에서는 Django 앱을 실행할 때 오류가 발생할 가능성이 높습니다.

 

왜냐하면 두 개의 프로젝트가 동일한 컴퓨터에 설치된 하나의 파이썬 실행 환경(runtime)을 사용하므로 파이썬 패키지를 서로 공유하게 되기 때문인데요. 만약에 프로젝트 B에서 마지막에 Django 패키지를 설치했다면 해당 컴퓨터에는 Django 4.x 버전이 설치되어 있기 때문에 Django 3.x 버전을 사용하도록 되어 있는 프로젝트 A에서 Django 앱을 실행할 때 패키지 버전이 맞지 않아 오류가 발생하는 것이지요.

 

파이썬에서는 패키지를 설치할 때는 보통 `pip`라는 패키지 매니저를 사용하는데, 기본적으로 해당 컴퓨터 상에서 파이썬이 설치된 경로의 `site-packages` 디렉터리에 안에 설치됩니다. 노드의 npm이나 자바의 maven과 같은 패키지 매니저가 프로젝트 별로 패키지 설치를 지원하는 반면에, 아직까지 파이썬의 pip는 시스템 전역으로만 패키지를 설치할 수 있습니다.

 

가상환경과 venv 모듈

다른 언어와 달리 파이썬에서는 일반적으로 프로젝트 별로 독립된 개발 환경을 구성하기 위해서 가상 환경(virtual environment)를 이용하는데요. `venv`라는 내장 모듈을 통해서 쉽게 가상 환경을 만들 수 있으며 이를 통해 프로젝트 간 의존성 충돌 문제를 효과적으로 예방할 수 있습니다.

 

파이썬에서 가상 환경(virtual environment)은 하나의 컴퓨터에서 프로젝트 별로 독립된 파이썬 실행 환경(runtime)을 구성할 수 있도록 해줍니다. 가상 환경을 사용하지 않으면 컴퓨터 내의 모든 프로젝트에서 하나의 파이썬 실행 환경을 사용하면서 동일한 경로에 외부 패키지를 설치하고 서로 공유하게 됩니다. 이럴 경우, 하나의 프로젝트에서 설치한 패키지의 버전이 다른 프로젝트에서 설치한 동일 패키지의 다른 버전과 충돌을 일으킬 소지가 생기기 때문에, 일반적으로 파이썬 프로젝트 별로 독립된 가상 환경을 구성하여 사용하는 것이 권장됩니다.

 

가상환경 구성

파이썬2에서는 virtualenv 라는 외부 패키지를 사용해서 가상 환경을 구성했었는데, 파이썬 3.3 부터는 venv모듈이 기본적으로 포함되어 있기 때무에 별도 외부 패키지 설치없이 파이썬만 설치되어 있으면 바로 가상 환경 구성이 가능하게 되었습니다.

 

가상 환경을 구성할 프로젝트 디렉토리에 들어가서 아래와 같이 커맨드를 날리면 `.venv`라는 디렉토리 생길 것입니다. 여기서 반드시 디렉토리 이름을 `.venv`로 할 필요는 없지만, 대부분의 파이썬 프로젝트들이 따르는 관행이므로 지켜주시는 게 좋습니다.

 

cd <프로젝트 디렉토리>
python -m venv .venv

 

가상환경 활성화

가상 환경을 활성화 하기 위해서는 `.venv` 디렉토리 안에 있는스크립트를 실행해줘야 하는데요.

윈도우에서는 가상환경이 있는 디렉토리로 이동 후,  `Scripts` 디렉토리 안에 있는 `activate.bat`파일을 실행하면 됩니다.

cd <프로젝트 디렉토리>

<가상환경 이름>\Scripts\activate.bat

 

 

이제 `where` 커맨드를 통해 어떤 파이썬 인터프리터가 사용되는지 확인해보겠습니다. 

where python

이 명령어는 시스템에서 현재 사용 중인 python 실행 파일의 경로를 출력합니다. 가상환경이 활성화된 상태라면, venv\Scripts\python.exe와 같은 경로가 표시될 것입니다.

 

가상 환경에서 제공하는 파이썬의 버전은 다음과 같이 확인할 수 있습니다. 

python --version

 

가상 환경에 패키지 설치

가상 환경이 활성화된 상태에서 패키지를 설치하면, `.venv` 디렉토리 내부에 해당 패키지가 설치됩니다. 즉, 컴퓨터에 설치되어 있는 파이썬 실행 환경이나 다른 파이썬 프로젝트에 아무 영향을 주지 않습니다.

 

가상 환경이 활성화된 상태에서 `pip` 를 사용하여 패키지를 설치할 수 있습니다.

예를 들어, `request`라는 패키지를 설치하려면 다음과 같이 입력합니다.

pip install requests

이 명령어를 입력하면 requests 패키지가 가상환경 내에 설치됩니다. 설치된 패키지는 가상환경 폴더 내의 Lib\site-packages 디렉토리에 저장됩니다.

 

  • 설치된 패키지 확인

설치된 패키지를 확인하려면 다음 명령어를 사용합니다. 이 명령어를 사용하면 현재 가상환경에 설치된 모든 패키지의 목록과 버전을 확인할 수 있습니다.

pip list
  • 특정 버전의 패키지 설치

특정 버전의 패키지를 설치하려면, 패키지 이름 뒤에 `==버전번호`를 붙여서 설치할 수 있습니다.

pip install requests==2.25.1
  • 패키지 업데이트

가상 환경 내의 패키지를 최신 버전으로 업데이트하려면 다음 명령어를사용합니다. 

pip install --upgrade 패키지명

 

패키지를 최신 버전으로 업데이트 하려면 아래와 같이 사용할 수 있습니다.

pip install --upgrade 패키지명
  • 패키지 제거
pip uninstall 패키지명

 

 

이렇게 독립된 가상 환경에 패키지를 설치하게 되면 다른 프로젝트에서 사용하고 있는 `request`패키지를 덮어쓸 일이 없습니다. 반대로 다른 프로젝트에서도 이 프로젝트에서 사용하고 있는 `request`패키지를 덮어쓸 위험이 사라지게 됩니다.

 

가상 환경 비활성화

가상환경을 빠져나올 때는 터미널에` deactivate`만 입력해주면 됩니다. 가상 환경이 비활성화되면 다시 원래대로 운영체제의 기본 파이썬 인터프리터를 사용하게 됩니다.

deactivate

 

 

이상으로 파이썬에 기본으로 내장된 venv 모듈을 이용하여 가상 환경을 사용하는 방법에 대해서 살펴보았습니다. venv를 잘 활용하셔서 의존성 충돌에 대한 걱정 없이 프로젝트 별로 서로 격리된 파이썬 환경에서 개발하실 수 있으셨으면 좋겠습니다.

 

 

 

728x90