본 글은 Windows 사용자 기준으로 작성되었습니다.
$ python --version
3.13.5
아래 스크립트를 실행시키면 바로 알 수 있다.
import site
# 패키지 설치 경로 출력
print(site.getsitepacfkages())
pyenv 라이브러리를 사용하면된다.
# penv-win (Windows) 설치를
# $env:USERPROFILE\.pyenv 경로에 한다.
git clone https://github.com/pyenv-win/pyenv-win.git "$env:USERPROFILE\.pyenv"
pyenv 명령어 실행시 아래와 같이 출력되면 설치 완료된 상태다.

$ pyenv global 3.13.5 # 사용 파이썬 버전 3.13.5 전환
다시 스크립트를 실행시켜보자.
import site
# 패키지 설치 경로 출력
print(site.getsitepacfkages())
[
# 파이썬 모듈이 설치된 경로
'C:\\Users\\{USERNAME}\\.pyenv\\pyenv-win\\versions\\3.13.5',
# site-packages 패키지가 설치된 경로
'C:\\Users\\{USERNAME}\\.pyenv\\pyenv-win\\versions\\3.13.5\\Lib\\site-packages'
]
.pyenv 하위의 사용 버전 (3.13.5)/Lib/site-packages 폴더에 설치된 것을 알 수 있다.
서로 다른 파이썬 버전에서는 서로 다른 패키지 의존성 관리를 위해서다.
예를 들면 파이썬 3.11.9 에서 사용하는 패키지 버전과 파이썬 3.13.5 에서 지원하는 패키지 버전은 다를 수 있다.
이때, pyenv 를 사용하면 다음과 같은 이점을 얻는다.
1. CLI 로 뚝딱 파이썬 버전 변경이 가능하다.
2. 각 파이썬 버전마다 패키지 디렉토리가 분리되어있다.
$USERPROFILE\.pyenv\pyenv-win 디렉토리에 보면 versions 디렉토리에 버전별로 설치된 파이썬 모듈이 분리되어 있는 것을 확인할 수 있다.


패키지는 versions/{version}/Lib 디렉토리에 설치된다.
이로써 사용중인 파이썬 버전에 따라 패키지 버전을 달리할 수 있다.
pyenv 로 파이썬 버전별로 패키지 관리를 분리할 수 있었다.
그러나 같은 파이썬 버전 내에서 '프로젝트 별'로 패키지를 분리하고 싶을 땐 어떨까?
pyenv 만으론 부족하다.
이럴때 사용하는게 venv (Virtual ENVironment) 다.
venv 를 사용하면 다른 프로젝트와 충돌없이 프로젝트별로 개발 환경을 구축할 수 있다.
venv 를 지원하는 라이브러리로 poetry 가 있다.
# peotry 설치
$ pip3 install poetry
peotry 를 통해 venv 환경 초기 설정을 구축한다.
$ poetry init
초기화를 완료하면 다음과 같은 pyprotject.toml 파일이 생성된다.
이는 venv 환경에 쓰이는 설정 정보다.
[project]
name = "python-practice"
version = "0.1.0"
description = "This is for testing python-practice"
authors = [
{name = "m_falcon",email = "user@email.com"}
]
license = {text = "ISC"}
readme = "README.md"
requires-python = ">=3.13"
dependencies = [
]
[build-system]
requires = ["poetry-core>=2.0.0,<3.0.0"]
build-backend = "poetry.core.masonry.api"
pip3 가 아닌 peotry 명령어로 설치한다.
$ poetry add {패키지명}
# e.g. poetry add requests
pip3 는 .pyenv/versions/{version}/Lib 에 패키지를 설치했다면
venv 는 {USERPROFILE}\AppData\Local\pypoetry\Cache\virtualenvs\{PROJECT명-Hash값}\Lib\site-packages 경로에 설치한다.

이제, 파이썬 버전뿐만 아니라 프로젝트별로 패키지 의존성 관리가 가능해졌다.
poetry.lock 파일은 설정된 venv 환경의 패키지 버전, 해시값에 대한 상세 정보를 담고있다.
다른 컴퓨터에서도 같은 같은 프로젝트 내에서 정확히 같은 패키지 버전의 venv 를 구축할 수 있게한다.
node.js 프로젝트로 치면 package-lock.json 역할을 한다고 보면 된다.
[[package]]
name = "idna"
version = "3.10"
description = "Internationalized Domain Names in Applications (IDNA)"
optional = false
python-versions = ">=3.6"
groups = ["main"]
files = [
{file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"},
{file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"},
]
[package.extras]
all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"]
[[package]]
name = "requests"
version = "2.32.4"
description = "Python HTTP for Humans."
optional = false
python-versions = ">=3.8"
groups = ["main"]
files = [
{file = "requests-2.32.4-py3-none-any.whl", hash = "sha256:27babd3cda2a6d50b30443204ee89830707d396671944c998b5975b031ac2b2c"},
{file = "requests-2.32.4.tar.gz", hash = "sha256:27d0316682c8a29834d3264820024b62a36942083d52caf2f14c0591336d3422"},
Q. poetry.lock 을 사용하지 않으면 어떻게 되나요?
A. poetry install 시 매번 다른 버전의 패키지가 설치될 수 있다.
python 버전 스위칭을 위해 pyenv, 프로젝트별 패키지 의존성 관리를 위해 poetry 라이브러리를 사용하라.