일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 소프트웨어
- 파이썬
- 버전관리
- 빅데이터
- 클라우드컴퓨팅
- 웹개발
- 인공지능
- 사이버보안
- 데이터분석
- 네트워크
- 프로그래밍
- 코딩
- 데이터구조
- 자료구조
- 데이터과학
- 딥러닝
- 2
- 네트워크보안
- 프로그래밍언어
- 컴퓨터공학
- 컴퓨터과학
- Yes
- 보안
- 알고리즘
- 소프트웨어공학
- 데이터베이스
- 자바스크립트
- I'm Sorry
- 컴퓨터비전
- 머신러닝
- Today
- Total
스택큐힙리스트
Python에서 버전 번호를 어떻게 비교할 수 있나요? 본문
나는 알이 들어있는 디렉토리를 탐색하여 그 알들을 sys.path에 추가하고자 합니다. 만약 디렉토리에 같은 .egg 파일의 두 버전이 있다면, 최신 버전만 추가하고 싶습니다.
파일 이름에서 이름과 버전을 추출하기 위해 정규표현식 r^(?P
문자열을 비교하고 있기 때문에 10보다 높은 2개의 정렬이 있지만, 버전에 대해서는 올바르지 않습니다.
>>> 2.3.1 > 10.1.1
True
분할, 구문 분석, int로 캐스팅 등을 할 수 있겠지만 결국 해결책을 얻을 수 있을 것입니다. 그러나 이것은 Python입니다. not Java. 버전 문자열을 비교하는 우아한 방법이 있을까요?
답변 1
packaging.version.parse 를 사용하십시오.
>>> # pip install packaging
>>> from packaging import version
>>> version.parse(2.3.1) < version.parse(10.1.2)
True
>>> version.parse(1.3.a4) < version.parse(10.1.2)
True
>>> isinstance(version.parse(1.3.a4), version.Version)
True
>>> isinstance(version.parse(1.3.xy123), version.LegacyVersion)
True
>>> version.Version(1.3.xy123)
Traceback (most recent call last):
...
packaging.version.InvalidVersion: Invalid version: '1.3.xy123'
packaging.version.parse는 제3자 유틸리티이지만 setuptools가 사용하기 때문에 (이미 설치되어 있을 가능성이 높음) 현재 PEP 440에 준수하며, 버전이 준수되면 packaging.version.Version를 반환하고 그렇지 않으면 packaging.version.LegacyVersion를 반환합니다. 후자는 항상 유효한 버전보다 우선하여 정렬됩니다.
참고 : 포장은 최근에 vendored into setuptools되었습니다.
당신이 마주칠 수 있는 고대의 $$$ 방법은 $$$이며, 이는 문서화되어 있지 않으며 과거의 $$$에만 따라합니다.
>>> from distutils.version import LooseVersion, StrictVersion
>>> LooseVersion(2.3.1) < LooseVersion(10.1.2)
True
>>> StrictVersion(2.3.1) < StrictVersion(10.1.2)
True
>>> StrictVersion(1.3.a4)
Traceback (most recent call last):
...
ValueError: invalid version number '1.3.a4'
당신이 볼 수 있듯이, 이는 유효한 PEP 440 버전을 엄격하지 않다고 인식하므로 모던 파이썬에서 유효한 버전의 개념과 일치하지 않습니다.
distutils.version는 문서화되어 있지 않으므로, here가 관련된 독스트링(docstring)입니다.
답변 2
파이썬에서 버전 번호를 비교하는 방법은 비교 연산자를 사용하는 것입니다. 버전 번호는 대개 세 부분으로 구성되어 있으므로, 각 부분을 정수로 변환한 다음 비교하면 됩니다.다음은 두 버전 번호를 비교하는 샘플 코드입니다.
```python
version1 = '1.2.3'
version2 = '1.2.4'
def compare_versions(version1, version2):
v1_parts = version1.split('.')
v2_parts = version2.split('.')
max_length = max(len(v1_parts), len(v2_parts))
for i in range(max_length):
v1_part = int(v1_parts[i] if i < len(v1_parts) else 0)
v2_part = int(v2_parts[i] if i < len(v2_parts) else 0)
if v1_part < v2_part:
return -1
elif v1_part > v2_part:
return 1
return 0
print(compare_versions(version1, version2))
```
이 코드는 version1과 version2를 비교하여 version1이 version2보다 낮으면 -1을, 높으면 1을, 같으면 0을 반환합니다. 이 코드를 실행하면, version1이 version2보다 하나 작으므로 -1을 반환합니다.
파이썬에서 버전 번호를 비교하는 방법은 간단합니다. 정수로 변환한 다음 비교 연산자를 사용하면 됩니다. 이를 이용해서 프로그래밍을 할 때는 코드의 가독성과 확장 가능성을 고려하여 구현해야 합니다.