Python 가상 환경

PythonBeginner
지금 연습하기

소개

Python 가상 환경 실습에 오신 것을 환영합니다. 가상 환경을 사용하는 이유는 Python 코드를 캡슐화된 환경에서 테스트하고, 특정 프로젝트에서만 필요한 라이브러리로 기본 Python 설치 환경이 오염되는 것을 방지하기 위함입니다. 이러한 관행은 깔끔하고 재현 가능하며 충돌 없는 개발 환경을 유지하는 데 매우 중요합니다.

이번 실습에서는 Python 가상 환경 및 종속성을 관리하는 5가지 인기 도구를 직접 다뤄봅니다.

  • virtualenv: 격리된 Python 환경을 생성하기 위한 기초 도구입니다.
  • Poetry: 종속성 관리, 패키징 및 배포를 위한 올인원 도구입니다.
  • Pipenv: Python 패키징의 장점들을 하나로 통합하려는 도구입니다.
  • Anaconda: 강력한 환경 관리 기능을 포함한 데이터 과학 분야의 인기 플랫폼입니다.
  • UV: 매우 빠른 속도를 자랑하는 차세대 Python 패키지 설치 및 해결 도구입니다.

실습을 마치면 프로젝트의 요구 사항에 맞는 적절한 도구를 선택하고 사용할 수 있게 될 것입니다.

virtualenv

이 단계에서는 virtualenv를 사용하여 격리된 Python 환경을 생성하고 관리하는 방법을 배웁니다. virtualenv는 격리된 Python 환경을 생성하는 도구로, 이를 통해 코드를 캡슐화된 환경에서 테스트하고 기본 Python 설치 환경이 불필요한 라이브러리로 채워지는 것을 방지할 수 있습니다. 이 도구는 이미 설치되어 있습니다.

먼저 가상 환경을 저장할 디렉토리를 만들고 HelloWorld라는 이름의 새 가상 환경을 생성하겠습니다. WebIDE에서 터미널을 열고 다음 명령어를 실행하세요.

mkdir -p ~/.virtualenvs
virtualenv ~/.virtualenvs/HelloWorld

환경이 생성되면서 몇 가지 출력 내용이 표시됩니다. 가상 환경은 ~/.virtualenvs/HelloWorld 디렉토리에 생성됩니다.

created virtual environment CPython3.10.12.final.0-64 in 257ms
  creator CPython3Posix(dest=/home/labex/.virtualenvs/HelloWorld, clear=False, no_vcs_ignore=False, global=False)
  seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=/home/labex/.local/share/virtualenv)
    added seed packages: pip==24.0, setuptools==69.5.1, wheel==0.43.0
  activators BashActivator,CShellActivator,FishActivator,NushellActivator,PowerShellActivator,PythonActivator

이제 가상 환경을 활성화하겠습니다. 활성화하면 터미널 프롬프트에 (HelloWorld)가 표시되어 가상 환경이 활성화되었음을 알 수 있습니다. 이제 pip를 사용하여 설치하는 모든 것은 이 환경에만 국한되며 전역 Python 설치에는 영향을 주지 않습니다.

source ~/.virtualenvs/HelloWorld/bin/activate

활성화 후 프롬프트가 다음과 같이 변경됩니다:

(HelloWorld) labex:project/ $

가상 환경을 종료하려면 deactivate 명령어를 사용하면 됩니다:

deactivate

터미널 프롬프트에서 (HelloWorld) 접두사가 사라진 것을 확인할 수 있습니다.

나중에 환경을 다시 활성화하려면 어디서든 source 명령어를 다시 사용하면 됩니다:

source ~/.virtualenvs/HelloWorld/bin/activate

프롬프트가 다시 변경되고 HelloWorld 환경으로 돌아와 프로젝트 작업을 계속할 수 있습니다.

Poetry

이 단계에서는 Python의 종속성 관리 및 패키징을 위한 현대적인 도구인 Poetry를 살펴봅니다. Poetry를 사용하면 프로젝트가 의존하는 라이브러리를 선언하고, 이를 자동으로 관리(설치/업데이트)할 수 있습니다. 이 환경에는 Poetry가 이미 설치되어 있습니다.

먼저 가상 환경이 비활성화되어 있는지 확인하세요.

deactivate

먼저 Poetry를 사용하여 새 프로젝트를 생성하겠습니다. 이 명령어는 프로젝트를 위한 표준 디렉토리 구조를 설정합니다.

poetry new my-poetry-project

이 명령어는 my-poetry-project라는 새 디렉토리를 생성하며 구조는 다음과 같습니다:

my-poetry-project
├── pyproject.toml
├── README.md
├── my_poetry_project
│   └── __init__.py
└── tests
    ├── __init__.py
    └── test_my_poetry_project.py

여기서 가장 중요한 파일은 프로젝트와 종속성을 관리하는 pyproject.toml입니다. 초기 내용을 확인해 보겠습니다.

cat my-poetry-project/pyproject.toml

출력 내용은 다음과 비슷할 것입니다:

[tool.poetry]
name = "my-poetry-project"
version = "0.1.0"
description = ""
authors = ["Your Name <you@example.com>"]
readme = "README.md"

[tool.poetry.dependencies]
python = "^3.10"

[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"

이제 새 프로젝트 디렉토리로 이동합니다:

cd my-poetry-project

새 종속성을 추가하려면 poetry add 명령어를 사용합니다. Poetry는 적절한 버전을 자동으로 찾아 pyproject.toml에 추가합니다. pendulum 라이브러리를 추가해 보겠습니다.

poetry add pendulum

pyproject.toml에 나열된 모든 종속성을 설치하려면(예: 프로젝트를 복제했을 때) 다음을 실행합니다:

poetry install

마지막으로 종속성을 제거하려면 poetry remove 명령어를 사용합니다:

poetry remove pendulum

이 명령어는 패키지를 제거하고 pyproject.toml 파일을 그에 맞게 업데이트합니다.

Pipenv

이 단계에서는 Python 패키징의 장점들을 하나로 통합하려는 도구인 Pipenv를 배웁니다. Pipenv는 프로젝트를 위한 가상 환경을 자동으로 생성 및 관리하며, 패키지를 설치/제거할 때 Pipfile에서 자동으로 패키지를 추가/제거합니다.

먼저 새 프로젝트를 위한 디렉토리를 만들고 이동합니다.

cd ~/project
mkdir my_pipenv_project
cd my_pipenv_project

이제 패키지를 설치해 보겠습니다. Pipenv는 자동으로 새 가상 환경과 종속성을 추적할 Pipfile을 생성합니다. requests 라이브러리를 설치해 보겠습니다.

pipenv install requests

명령어가 완료되면 디렉토리에 Pipfile과 Pipfile.lock이라는 두 개의 새 파일이 생성됩니다. Pipfile은 프로젝트에 필요한 종속성을 추적하는 데 사용됩니다. 내용을 확인해 보겠습니다:

cat Pipfile

출력 내용의 [packages] 아래에 requests 패키지가 나열된 것을 볼 수 있습니다.

[[source]]
url = "https://pypi.org/simple"
verify_ssl = false
name = "pypi"

[packages]
requests = "*"

[dev-packages]

[requires]
python_version = "3.10"

프로젝트와 연결된 가상 환경을 활성화하려면 다음을 실행합니다:

pipenv shell

터미널 프롬프트가 변경되어 프로젝트의 격리된 환경 내부에 있음을 나타냅니다.

패키지를 제거하려면 활성화된 셸 내에서 uninstall 명령어를 실행할 수 있습니다:

pipenv uninstall requests

가상 환경 셸을 종료하려면 exit를 입력하면 됩니다:

exit

Anaconda

이 단계에서는 Anaconda를 시작합니다. Anaconda는 과학 계산을 위한 Python 및 R 배포판으로, 패키지 관리와 배포를 단순화합니다. 패키지 관리자인 conda는 환경을 생성하고 관리하는 데 매우 뛰어납니다. 터미널에서 conda 명령어를 사용할 수 있습니다.

먼저 my_conda_env라는 이름의 새 환경을 생성하겠습니다. 사용할 Python 버전도 지정합니다. -y 플래그는 모든 확인 프롬프트를 자동으로 승인합니다.

cd ~/project
conda create -n my_conda_env python=3.10 -y

환경이 생성되면 사용하기 위해 활성화해야 합니다.

conda activate my_conda_env

이제 터미널 프롬프트 앞에 (my_conda_env)가 붙어 환경이 활성화되었음을 나타냅니다. 이제 설치하는 모든 패키지는 이 환경에만 국한됩니다. 예시로 numpy를 설치해 보겠습니다.

conda install numpy -y

환경 작업이 끝나면 비활성화할 수 있습니다.

conda deactivate

프롬프트에서 접두사가 사라지고 기본 환경으로 돌아옵니다.

UV

이 단계에서는 Ruff의 제작사인 Astral에서 만든 매우 빠른 Python 패키지 설치 및 해결 도구인 UV를 알아봅니다. UV는 pip 및 pip-tools 워크플로우를 대체하도록 설계되었으며 10~100배 더 빠를 수 있습니다. UV는 이미 설치되어 있습니다.

먼저 새 프로젝트를 초기화하겠습니다. uv init 명령어는 pyproject.toml 파일과 .venv 디렉토리에 가상 환경을 생성합니다.

cd ~/project
uv init my-uv-project

이제 새로 생성된 프로젝트 디렉토리로 이동합니다.

cd my-uv-project

종속성을 추가하려면 uv add 명령어를 사용합니다. 이는 poetry add나 npm install과 유사합니다. requests 라이브러리를 추가해 보겠습니다.

uv add requests

UV는 현재 디렉토리의 가상 환경을 자동으로 감지하고 사용합니다. uv run을 사용하여 이 관리되는 환경 내에서 명령어를 실행할 수 있습니다. 환경 내부의 Python 버전을 확인해 보겠습니다.

uv run python --version

전역 버전이 아닌 가상 환경의 Python 버전이 표시되어야 합니다.

셸을 수동으로 활성화하려면 표준 venv와 동일하게 수행할 수 있습니다:

source .venv/bin/activate

프롬프트가 (.venv)로 변경되어 환경이 활성화되었음을 나타냅니다. 활성화된 셸을 종료하려면 deactivate 명령어를 사용하세요.

deactivate

UV는 패키지 및 환경 관리를 위한 단일하고 매우 빠른 바이너리를 제공하여 워크플로우를 단순화합니다.

요약

이번 실습에서는 Python 가상 환경 및 종속성을 관리하는 데 필수적인 여러 도구를 직접 다뤄보았습니다. 프로젝트 환경을 적절히 관리하는 것은 모든 Python 개발자에게 재현성을 보장하고 충돌을 방지하기 위한 기본 기술입니다.

다음 내용을 배웠습니다:

  • virtualenv를 사용하여 기본적인 격리 환경을 생성, 활성화 및 관리하는 방법.
  • Poetry를 활용하여 pyproject.toml 파일을 통해 프로젝트 생성, 종속성 관리 및 패키징을 통합하는 방법.
  • Pipenv를 사용하여 Pipfile로 애플리케이션 종속성을 선언적으로 관리하고 개발 환경 설정을 단순화하는 방법.
  • Anaconda (conda)를 사용하여 환경을 생성하고 관리하는 방법(복잡한 패키지 처리에 강점이 있어 데이터 과학 커뮤니티에서 특히 인기 있음).
  • 패키지 설치, 해결 및 환경 관리를 단일 바이너리로 통합한 매우 빠른 도구인 UV를 발견하는 방법.

각 도구는 장점이 있으며, 최선의 선택은 프로젝트의 특정 요구 사항과 개인적인 워크플로우 선호도에 따라 달라집니다. 이제 여러분은 정보에 입각한 결정을 내리고 Python 프로젝트를 효과적으로 관리할 준비가 되었습니다.