실습 · 연습문제 1개
버전 제약 검사기 version-specifier
pyproject.toml의 의존성은 numpy>=1.23,<2.6처럼 버전 제약(version specifier)으로 쓴다. resolver는 후보 버전마다 이 제약을 검사한다. 함수 satisfies(version, spec)를 완성해, 버전이 제약을 만족하는지 판정한다.
spec은 쉼표로 구분한 조건의 목록이고, 모든 조건을 만족해야True다. 조건 앞뒤의 공백은 무시한다.- 버전은
1.26.4처럼 점으로 구분한 정수만 다룬다(rc,dev같은 사전 배포 표기는 다루지 않는다).
| 조건 | 의미 |
|---|---|
==1.26.4, !=1.26.4 |
같다, 다르다 |
>=, <=, >, < |
크기 비교 |
==1.26.*, !=1.26.* |
앞자리가 1.26인가(아닌가) |
~=1.4.2 |
호환 릴리스(compatible release). >=1.4.2, ==1.4.*와 같다 |
~=2.2 |
>=2.2, ==2.*와 같다 |
규칙(Python 패키징 표준의 버전 규칙을 단순화한 것):
- 버전은 문자열이 아니라 정수의 tuple로 비교한다.
1.10은1.9보다 크다. - 길이가 다르면 짧은 쪽 뒤에 0을 채워 비교한다.
2.0과2.0.0은 같다. ~=X.Y.Z는>=X.Y.Z이면서 마지막 자리를 뺀X.Y가 같은 버전이다.
예:
satisfies("1.4.10", "~=1.4.2") # True
satisfies("1.5.0", "~=1.4.2") # False
satisfies("2.0.0", "==2.0") # True
satisfies("1.26.4", "==1.26.*") # True
satisfies("2.6.0", ">=1.23, <2.6") # False
테스트의 기대값은 Python 패키징 표준을 구현한 packaging 라이브러리의 판정과 같다.