워로디스

Python. uv init --python 3.12 와 uv python pin 3.12 의 차이 본문

개발/Python

Python. uv init --python 3.12 와 uv python pin 3.12 의 차이

워로디스 2026. 5. 24. 08:29

uv init --python 3.12 와 uv python pin 3.12 의 차이는 “프로젝트가 허용하는 Python 범위”“내 로컬에서 실제로 쓸 Python 선택”의 차이입니다.

uv init --python 3.12

이건 보통 pyproject.toml에 이런 식으로 들어갑니다.

[project]
requires-python = ">=3.12"

즉, 의미는:

이 프로젝트는 Python 3.12 이상에서 동작한다.

입니다. 그래서 3.12도 가능하고, 3.13도 가능하고, 나중에 3.14도 조건상 가능할 수 있습니다.

반면:

uv python pin 3.12

이건 프로젝트 디렉터리에 보통 .python-version 파일을 만듭니다.

3.12

의미는:

이 프로젝트에서 uv가 Python을 고를 때 3.12 계열을 우선 사용하라.

입니다.

그래서 차이를 예로 들면:

uv init --python 3.12
uv sync

만 했을 때는 requires-python = ">=3.12" 조건만 만족하면 되므로, 내 컴퓨터에 3.13이 더 적절하게 발견되면 3.13을 쓸 수 있습니다.

하지만:

uv init --python 3.12
uv python pin 3.12
uv sync

까지 하면, uv는 .python-version을 보고 3.12를 쓰려 합니다.

정리하면:

상황 의미 실제 Python 선택
uv init --python 3.12만 함 프로젝트는 3.12 이상 필요 3.12, 3.13 등 가능
uv python pin 3.12도 함 이 로컬 프로젝트는 3.12를 사용 3.12 계열로 고정
둘 다 안 함 uv 기본값/발견된 Python 사용 환경에 따라 달라짐

실무적으로는 이렇게 보면 됩니다.

라이브러리 프로젝트라면 보통 requires-python만 넓게 잡는 경우가 많습니다.

uv init --python 3.12

이 경우 “이 패키지는 3.12 이상 지원”이라는 선언이 중요합니다.

애플리케이션 프로젝트라면 pin까지 하는 편이 더 안전합니다.

uv init --python 3.12
uv python pin 3.12

이 경우 팀원이나 CI에서 “다들 3.12로 개발/실행”하게 만들 수 있습니다.

정확히 확인하려면 아래를 보면 됩니다.

type pyproject.toml
type .python-version
uv run python -c "import sys; print(sys.version); print(sys.executable)"

한 줄로 말하면:

uv init --python 3.12는 호환성 선언이고, uv python pin 3.12는 실행 버전 선택입니다.

반응형