Python에서 가상 환경 시작하기
이 글에서는 윈도우와 리눅스 운영체제 모두에서 파이썬 가상 환경을 설정하는 방법에 대해 알아봅니다.
로컬 개발 환경에서 여러 프로젝트를 진행하다 보면 종종 의존성 문제가 발생하곤 합니다. 각 프로젝트마다 별도의 가상 환경을 생성하면 의존성과 프로젝트 요구사항을 보다 효율적으로 관리할 수 있습니다.
파이썬에서 가상 환경이 제공하는 이점을 최대한 활용하기 위해, 지금부터 가상 환경을 만들고 활성화하는 방법을 자세히 살펴보겠습니다. 👩🏽💻
가상 환경이란 무엇일까요?
가상 환경은 프로젝트의 코드와 필요한 의존성 라이브러리들을 담고 있는 격리된 독립적인 공간입니다.
그렇다면 왜 굳이 가상 환경을 사용해야 할까요?
가상 환경을 사용하면 각기 다른 프로젝트에서 동일한 라이브러리의 여러 버전을 설치하고 사용할 수 있습니다. 또한 가상 환경은 두 개 이상의 프로젝트에서 서로 다른 버전을 사용하더라도 주요 변경사항으로 인한 문제를 방지해 줍니다. 이 내용을 좀 더 자세히 알아볼까요?
파이썬 패키지 설치
파이썬 표준 라이브러리는 단위 테스트, 운영 체제와 상호 작용, 날짜 및 시간 관리 등 다양한 작업을 위한 여러 유용한 모듈을 기본적으로 제공합니다.
하지만 파이썬 프로젝트를 진행하다 보면 파이썬 커뮤니티에서 개발한 다른 패키지들을 추가로 설치해야 할 때가 많습니다. 특히 웹 스크래핑, 머신 러닝, 웹 애플리케이션 개발과 같은 분야에서는 더욱 그렇습니다.
이러한 패키지를 설치하고 관리하기 위해 conda나 pip 같은 도구를 활용할 수 있습니다.
각 프로젝트는 필요로 하는 패키지 집합이 다릅니다. 하지만 개발 환경의 모든 패키지를 로컬 시스템에 설치해 버리면 모든 프로젝트가 전역적으로 설치된 패키지를 공유하게 됩니다.

왜 문제가 될까요?
개발 환경에 수많은 패키지가 설치되어 있을 수 있지만, 실제로 현재 진행 중인 프로젝트에는 그중 일부만 필요할 수 있습니다. 모든 프로젝트가 공통 설치 공간을 공유한다면, 어떤 패키지가 어떤 프로젝트에 필요한지, 즉 각 프로젝트의 정확한 의존성을 파악하기가 매우 어렵습니다.
이 접근 방식에는 또 다른 제약이 있습니다. 예를 들어, Django 2.2를 사용하는 프로젝트를 진행 중이라고 가정해 봅시다. 그러다 Django 4를 사용하는 다른 프로젝트를 새로 시작하기로 결정하고, 현재 환경에 최신 버전의 Django를 설치합니다.
기존에 설치된 버전은 어떻게 될까요?
기존 Django 설치는 제거되고 새로 설치한 Django 버전으로 덮어씌워집니다. 최신 버전에서는 특정 기능이 더 이상 사용되지 않을 수도 있으며, 이로 인해 이전 Django 프로젝트가 제대로 작동하지 않을 수 있습니다.

지금까지의 논의를 종합해 보면, 프로젝트를 실행하려면 자체적인 라이브러리 집합이 필요하기 때문에 모든 패키지가 공통 환경에 설치되면 의존성 관리가 어려워진다는 것을 알 수 있습니다.
가상 환경은 어떻게 작동할까요?
지금까지 전역 개발 환경(시스템 전체 설치)에 패키지를 설치하는 것과 관련된 문제점을 살펴보았습니다. 이제 가상 환경이 이러한 제약을 어떻게 해결해 주는지 이해할 차례입니다.
파이썬 프로젝트를 위한 가상 환경을 생성하고 활성화하면 현재 프로젝트에 필요한 패키지만 설치할 수 있습니다.

가상 환경을 사용하면 Django 프로젝트의 예시로 돌아가서, Django 2.2 및 Django 4 프로젝트를 서로 충돌 없이 실행할 수 있습니다. 왜냐하면 Django 설치가 더 이상 시스템 전체에 적용되는 것이 아니라 각 프로젝트의 가상 환경 내에 한정되기 때문입니다.
요컨대, 가상 환경은 프로젝트의 코드와 의존성을 모두 포함하는 격리된 환경을 제공합니다.
가상 환경의 장점

이제 파이썬 가상 환경이 어떻게 작동하는지 알았으니, 가상 환경 사용 시 얻을 수 있는 장점을 정리해 보겠습니다.
- 가상 환경은 개별 프로젝트에 격리된 개발 환경을 제공하여 특정 프로젝트에 필요한 패키지만 설치할 수 있도록 합니다.
- 프로젝트의 가상 환경은 독립적으로 격리되어 있으므로 요구 사항에 따라 다른 프로젝트에서 동일한 라이브러리의 여러 버전을 사용할 수 있습니다. 또한 가상 환경을 사용하면 라이브러리를 설치하고 개발 환경을 설정하는 데 필요한 시스템 권한에 대해 걱정할 필요가 없습니다.
- 가상 환경에 패키지를 설치한 후에는 `requirements.txt` 파일에서 프로젝트의 의존성을 기록할 수 있습니다. 이를 통해 다른 개발자들이 프로젝트의 개발 환경을 쉽게 복제하고, 단일 명령으로 필요한 패키지를 설치할 수 있습니다.

지금까지 가상 환경의 작동 방식과 사용 시 이점에 대해 알아보았습니다. 이제 파이썬에서 가상 환경을 만들고 관리하는 데 사용할 수 있는 몇 가지 인기 있는 도구를 살펴봅시다.
#1. virtualenv
Virtualenv는 파이썬 프로젝트를 위한 가상 환경을 만들고 관리하는 데 널리 사용되는 도구 중 하나입니다. virtualenv의 기능 중 일부는 `venv` 패키지에서 사용할 수 있지만, virtualenv는 venv에 비해 더 빠르고 확장성이 뛰어납니다.
#2. Pipenv
Pipenv는 virtualenv의 가상 환경 기능과 pip의 패키지 관리 기능을 결합한 도구입니다. `Pipfile`을 사용하여 가상 환경 내에서 프로젝트 의존성을 관리할 수 있습니다.
이 Pipenv 플레이그라운드에서 바로 브라우저에서 Pipenv를 체험해 볼 수 있습니다.
#3. conda
개발에 Anaconda 배포판을 사용하고 있다면, 패키지 관리와 가상 환경 생성에 conda를 활용할 수 있습니다.
더 자세한 내용은 conda를 사용한 환경 관리에 대한 종합 가이드를 참고하세요.
#4. Poetry
Poetry는 모든 파이썬 프로젝트에서 의존성을 관리할 수 있는 패키지 관리 도구입니다. Poetry를 사용하려면 파이썬 3.7 이상 버전이 설치되어 있어야 합니다.
#5. venv
이미 언급했듯이 venv는 virtualenv의 기능을 일부 제공하지만, 파이썬 3.3부터 파이썬 표준 라이브러리에 내장되어 있다는 장점이 있습니다.
별도의 외부 패키지를 설치할 필요 없이, 파이썬 설치와 함께 바로 사용할 수 있습니다. 이 튜토리얼에서는 가상 환경을 생성하고 작업하는 데 venv를 사용할 것입니다. ✅
우분투에서 파이썬 가상 환경 만들기

💬 이 튜토리얼을 따라 하려면 로컬에 파이썬 3이 설치되어 있어야 합니다. 파이썬 3.5 이상 버전을 사용하고 있는지 확인하세요.
이 섹션에서는 우분투 리눅스 시스템에서 가상 환경을 만들고 활성화하는 단계를 간략하게 설명합니다. 다른 리눅스 배포판에서도 동일한 단계를 사용할 수 있습니다.
작업을 더 쉽게 하기 위해 프로젝트 디렉토리를 만들고 해당 디렉토리로 이동합니다. 이 디렉토리 안에 가상 환경을 생성할 것입니다.
$ mkdir my_project $ cd my_project
파이썬 프로젝트를 위한 가상 환경을 만드는 일반적인 형식은 `python3 -m venv <가상 환경 이름 또는 경로>`입니다. 이 명령을 실행하면 `my_env`라는 가상 환경이 현재 작업 디렉토리에 생성됩니다.
$ python3 -m venv my_env
가상 환경 활성화 및 패키지 설치 방법
가상 환경을 만든 후에는 활성화하여 필요한 패키지를 설치할 수 있습니다. 가상 환경을 활성화하려면 다음 명령을 실행합니다.
$ source my_env/bin/activate
가상 환경을 활성화한 후 `pip list` 명령을 실행하면 설치된 패키지 목록을 확인할 수 있습니다.
$ pip list

아직 패키지를 설치하지 않았으므로, 생성한 각 가상 환경에 기본적으로 설치된 `setuptools`와 `pip`를 볼 수 있어야 합니다.
가상 환경 내에서 pip를 사용하면 특정 프로젝트에 필요한 패키지를 설치할 수 있습니다. 이것이 각 프로젝트에 독립적인 개발 환경을 제공하는 이유입니다.
이제 가상 환경을 활성화했으므로 pip를 사용하여 가상 환경에 프로젝트별 패키지를 설치할 수 있습니다. 예를 들어, 가장 많이 다운로드된 파이썬 패키지 중 하나인 `requests`를 설치해 보겠습니다. 이 패키지는 웹 API 작업에 유용한 HTTP 요청을 보내는 데 필요한 다양한 기능을 제공합니다.
$ pip install requests
requests 라이브러리를 설치하면 필요한 모든 의존성 패키지와 함께 설치되는 것을 확인할 수 있습니다.

$ pip list

다음과 같이 `pip freeze` 명령을 사용하고 그 결과를 `requirements.txt` 파일로 저장할 수도 있습니다.
$ pip freeze > requirements.txt
현재 프로젝트 디렉토리 내용을 살펴보면 `requirements.txt` 파일이 생성되었음을 알 수 있습니다.
$ ls # my_env requirements.txt
프로젝트 작업을 마친 후에는 다음 명령을 실행하여 가상 환경을 비활성화할 수 있습니다.
$ deactivate
윈도우에서 파이썬 가상 환경 만들기

일반적으로 개발에는 리눅스 환경이 선호됩니다. 윈도우 시스템을 사용하고 있다면, WSL(Windows Subsystem for Linux)을 활용하여 로컬 개발을 위한 우분투 터미널 환경을 설정할 수 있습니다.
윈도우 시스템을 사용하는 경우, Windows PowerShell 또는 명령 프롬프트에서 다음 명령을 사용하여 가상 환경을 만들 수 있습니다.
> python -m venv <가상 환경 경로>
가상 환경 활성화 방법
윈도우 시스템에서 가상 환경을 활성화하는 방법은 명령 프롬프트를 사용하는지, Windows PowerShell을 사용하는지에 따라 다릅니다.
명령 프롬프트에서 작업하는 경우에는 다음 명령을 실행하여 가상 환경을 활성화합니다.
> <가상 환경 경로>Scriptsactivate.bat
Windows PowerShell을 사용하는 경우에는 다음 명령을 실행하면 가상 환경이 활성화됩니다.
> <가상 환경 경로>ScriptsActivate.ps1
이제 가상 환경 내에서 필요한 모든 패키지를 설치할 수 있습니다.
가상 환경을 비활성화하려면 명령 프롬프트와 Windows PowerShell 모두에서 `deactivate` 명령을 실행하면 됩니다.
결론
이 글에서는 시스템 전체 설치의 한계점과, 이것이 파이썬 프로젝트 전반에서 의존성 관리를 어렵게 만드는 이유에 대해 논의했습니다. 파이썬 가상 환경은 의존성을 효과적으로 관리하는 동시에 개별 프로젝트에 격리된 개발 환경을 제공하는 솔루션입니다.
파이썬에서 가상 환경을 생성하고 관리하는 데 널리 사용되는 도구들 중, 파이썬 표준 라이브러리에 내장된 `venv`를 사용하여 가상 환경을 생성하고 활성화하는 방법을 배웠습니다.
프로젝트별 가상 환경 내에서 특정 라이브러리 버전을 설치할 수 있습니다. 그런 다음 이러한 요구 사항을 `requirements.txt` 파일에 저장하여 다른 개발자들이 프로젝트 환경을 쉽게 복제할 수 있도록 할 수 있습니다.
다음 파이썬 프로젝트를 시작할 때에는 보다 나은 의존성 관리를 위해 가상 환경을 적극적으로 활용해야 합니다. 즐거운 코딩하세요!🎉