Semantic Versioning System
Semantic Versioning (SemVer) 시스템에 따라,
소프트웨어에서 major와 minor, patch (or micro) 버전을 구분하여 버전을 매김.
이는 버전 번호를 MAJOR.MINOR.PATCH 형식으로 표현.
- MAJOR 버전:
- 이전 버전과 호환되지 않는 API 변경이 있을 때 증가.
- 큰 기능 변경이나 구조적 변화가 있을 때 증가.
- MINOR 버전:
- 이전 버전과 호환되는 새로운 기능을 추가할 때 증가.
- 기존 기능의 개선이나 작은 변경사항이 있을 때 증가.
3. PATCH 버전 (or Micro 버전):
- 버그 수정이나 성능 개선과 같은 작은 변경사항이 있을 때 증가.
예를 들어, 버전 2.1.3에서:
- 2는 MAJOR 버전
- 1은 MINOR 버전
- 3은 PATCH 버전
Python의 package.version
Python의 경우 version 의 문자열을 parse하여
- 대소비교,
- 정렬,
- 유효성 검사,
- 또는 각 속성을 쉽게 접근케 해주는
package.version
모듈을 제공.
packaging.version
모듈의 Version
객체에 대해 주요 Attributes:
major
: 메이저 버전 번호 (int
)minor
: 마이너 버전 번호 (int
)micro
: 마이크로(패치) 버전 번호 (int
)pre
: 프리릴리즈 정보 (tuple
또는None
)- 정식 릴리스 전의 버전.
- 주로 alpha, beta, rc(release candidate) 등이 포함됨.
- 아직 완전히 테스트되지 않았거나 불안정할 수 있는 버전.
- 예:
1.0.0a1
,2.3.0b2
,3.1.0rc1
post
: 포스트릴리스 번호 (tuple
또는None
)- 정식 릴리스 이후의 minor 수정을 나타냄.
- 주로 버그 수정이나 문서 업데이트 등 작은 변경사항에 사용.
- 기능적으로는 원래 버전과 동일.
- 예:
1.0.0.post1
,2.3.0.post2
dev
: 개발 릴리스 번호 (int
또는None
)- 개발 중인 버전을 나타냄.
- 주로 다음 버전을 위해 개발 진행 중인 작업을 표시.
- 매우 불안정하고 자주 변경될 수 있습니다.
- 예:
1.1.0.dev1
,2.0.0.dev20
local
: 로컬 버전 식별자 (str
또는None
)public
: 공개 버전 식별자 (str
)base_version
: 기본 버전 (메이저.마이너.마이크로)epoch
: 버전의 에포크 (int
)
예제0:
from packaging import version
v = version.parse("1.2.3rc1+build.4")
print(f"Major: {v.major}")
print(f"Minor: {v.minor}")
print(f"Micro: {v.micro}")
print(f"Pre-release: {v.pre}")
print(f"Post-release: {v.post}")
print(f"Dev release: {v.dev}")
print(f"Local: {v.local}")
print(f"Public: {v.public}")
print(f"Base version: {v.base_version}")
print(f"Epoch: {v.epoch}")
이 코드의 출력은 다음과 같음:
Major: 1
Minor: 2
Micro: 3
Pre-release: ('rc', 1)
Post-release: None
Dev release: None
Local: build.4
Public: 1.2.3rc1
Base version: 1.2.3
Epoch: 0
버전이 최신일수록 크다고 판정한다.
다음을 참고:
1.0.0.dev1 < 1.0.0a1 < 1.0.0b1 < 1.0.0rc1 < 1.0.0 < 1.0.0.post1
예제1
from packaging import version
v1 = version.parse("1.2.3")
v2 = version.parse("2.0.0")
# 비교 연산자 사용
print(v1 < v2) # True
print(v1 == v2) # False
print(v1 > v2) # False
# 버전 간 대소 비교
print(version.parse("1.2.3") < version.parse("1.3.0")) # True
# 버전 정렬
versions = ["1.0.0", "2.0.0", "1.2.3", "1.2.0", "1.0.1"]
sorted_versions = sorted(versions, key=version.parse)
print(sorted_versions)
# ['1.0.0', '1.0.1', '1.2.0', '1.2.3', '2.0.0']
# 버전 유효성 검사
try:
version.parse("invalid.version")
except version.InvalidVersion:
print("Invalid version string")
참고
rc
: release candidate 의 약자. alpha, beta 이후의 단계로 release 직전인 상태. 큰 에러가 없다면 release가 됨.- local version identifier: "1.2.3rc1+build.4"에서 "+" 기호
- 의미:
- 공식 릴리스 버전에 영향을 주지 않는 추가 정보를 제공.
- 빌드 정보, 날짜 스탬프, 또는 기타 메타데이터를 포함할 수 있음.
- PEP 440 (Python 버전 규격)에 정의되어 있습니다.
- 구조:
- + 기호 이후의 모든 것이 로컬 버전 식별자.
- 이 예에서는 build.4가 로컬 버전 식별자임.
- 특징:
- 로컬 버전은 버전 비교에 영향을 주지 않음.
- 동일한 공식 버전의 다른 빌드나 변형을 구분하는 데 사용됨.
- 의미:
'Python' 카테고리의 다른 글
[Py] assert 구문 (statement) (0) | 2024.09.24 |
---|---|
[CV] cv2.calibrateCamera (1) | 2024.09.22 |
[Summary] NumPy(Numerical Python) (1) | 2024.09.12 |
[Py] sys.exit() (0) | 2024.09.11 |
[Py] Namespace Package (0) | 2024.09.11 |