답변:
나는 해싱을 멀리 할 것입니다. 사용중인 libxslt 버전에는 사용에 영향을주지 않는 패치 유형이 포함될 수 있습니다.
대안으로 런타임에 확인하지 않는 것이 좋습니다 (어려운 요구 사항인지 아닌지 모르겠 음). 외부 종속성 (타사 라이브러리)이있는 내가 작성한 Python 항목의 경우 사용자가 Python 설치를 확인하여 적절한 버전의 모듈이 설치되어 있는지 확인할 수있는 스크립트를 작성합니다.
정의 된 'version'속성이없는 모듈의 경우 포함 된 인터페이스 (클래스 및 메서드)를 검사하고 예상하는 인터페이스와 일치하는지 확인할 수 있습니다. 그런 다음 작업중인 실제 코드에서 타사 모듈에 예상 한 인터페이스가 있다고 가정합니다.
pkg_resources를 사용하십시오 . PyPI에서 설치된 모든 것은 적어도 버전 번호가 있어야합니다.
>>> import pkg_resources
>>> pkg_resources.get_distribution("blogofile").version
'0.7.1'
pkg_resources
실제 실행중인 버전을 섀도 잉하는 다른 버전을 선택할 수 있습니다. 이는 사용자 PYTHONPATH
또는 유사한 파일 보다 우선 순위가 높기 때문 입니다.
__version__
: 속성 stackoverflow.com/q/17583443/562769
pkg_resources
링크는 오류 404입니다
몇 가지 아이디어 :
이를 위해 importlib_metadata
라이브러리를 사용할 수 있습니다 .
python <을 사용하는 3.8
경우 먼저 다음을 사용하여 설치하십시오.
pip install importlib_metadata
파이썬 이후 3.8
로 파이썬의 표준 라이브러리에 포함되어 있습니다.
그런 다음 패키지의 버전을 확인하려면 (이 예에서는 lxml
) 다음을 실행합니다.
>>> from importlib_metadata import version
>>> version('lxml')
'4.3.1'
이것은 PyPI에서 설치된 패키지에 대해서만 작동합니다. 또한 version
이 패키지가 제공하는 모듈 이름이 아니라 패키지 이름을 메서드에 대한 인수로 전달해야 합니다 (대개 동일하지만).
대부분의 경우 모든 경우를 다루지는 않기 때문에 사용 가능한 다양한 도구 ( 이 다른 답변에서pkg_resources
언급 한 가장 좋은 도구 포함)를 사용하는 것이 매우 불안정하다는 것을 알았습니다 . 예를 들면
우리의 버전을 얻을 수있는 신뢰할 수있는 방법이 필요하기 때문에 어떤 패키지, 모듈 또는 서브 모듈을, 내가 쓰기 결국 하는 getVersion . 사용하기 매우 간단합니다.
from getversion import get_module_version
import foo
version, details = get_module_version(foo)
자세한 내용은 설명서 를 참조하십시오.
__version__
다음을 제공하지 않는 모듈의 경우 추악하지만 작동합니다.
#!/usr/bin/env python3.6
import sys
import os
import subprocess
import re
sp = subprocess.run(["pip3", "show", "numpy"], stdout=subprocess.PIPE)
ver = sp.stdout.decode('utf-8').strip().split('\n')[1]
res = re.search('^Version:\ (.*)$', ver)
print(res.group(1))
또는
#!/usr/bin/env python3.7
import sys
import os
import subprocess
import re
sp = subprocess.run(["pip3", "show", "numpy"], capture_output=True)
ver = sp.stdout.decode('utf-8').strip().split('\n')[1]
res = re.search('^Version:\ (.*)$', ver)
print(res.group(1))