사용 setuptools
하여pbr
버전을 관리하는 표준 방법은 없지만 패키지를 관리하는 표준 방법은 setuptools
입니다.
버전 관리를 위해 전체적으로 찾은 최고의 솔루션 setuptools
은 pbr
확장 프로그램 과 함께 사용 하는 것 입니다. 이것이 현재 버전 관리의 표준 방법입니다.
전체 패키징을 위해 프로젝트를 설정하는 것은 간단한 프로젝트에는 무리가 될 수 있지만 버전을 관리해야하는 경우 모든 것을 설정하기에 적합한 수준 일 수 있습니다. 그렇게하면 PyPi 에서 패키지를 릴리스 할 수 있으므로 모든 사람이 Pip과 함께 패키지 를 다운로드하여 사용할 수 있습니다.
PBR은 대부분의 메타 데이터를 setup.py
도구에서 setup.cfg
파일로 이동 한 다음 버전을 포함 할 수있는 대부분의 메타 데이터의 소스로 사용됩니다. 이를 통해 메타 데이터를 pyinstaller
필요한 경우 ( 필요한 경우이 정보 가 필요할 수 있음)를 사용하여 실행 파일로 패키지 할 수 있으며 메타 데이터를 다른 패키지 관리 / 설정 스크립트와 분리합니다. 버전 문자열을 setup.cfg
수동으로 직접 업데이트 할 수 있으며 *.egg-info
패키지 릴리스를 빌드 할 때 폴더 로 가져옵니다 . 그런 다음 스크립트는 다양한 방법을 사용하여 메타 데이터에서 버전에 액세스 할 수 있습니다 (이 프로세스는 아래 섹션에 요약되어 있음).
VCS / SCM에 Git을 사용하는 경우이 설정은 Git에서 많은 메타 데이터를 가져 와서 버전, 작성자, 변경 로그, 특히 버전의 경우 repo의 git 태그를 기반으로 현재 커밋의 버전 문자열을 만듭니다.
PBR은 git repo에서 직접 버전, 작성자, 변경 로그 및 기타 정보를 가져 오기 때문에 setup.cfg
패키지에 대한 배포가 생성 될 때마다 메타 데이터 중 일부가 생략되고 자동 생성 될 수 있습니다 ( setup.py
)
실시간 현재 버전
setuptools
다음을 사용하여 최신 정보를 실시간으로 가져옵니다 setup.py
.
python setup.py --version
이것은 setup.cfg
최신 커밋과 repo에 존재하는 태그를 기반으로 파일 또는 git repo 에서 최신 버전을 가져옵니다 . 이 명령은 배포판의 버전을 업데이트하지 않습니다.
버전 업데이트
setup.py
예를 들어을 사용하여 배포를 생성하면 py setup.py sdist
모든 현재 정보가 추출되어 배포에 저장됩니다. 이것은 기본적으로 setup.py --version
명령을 실행 한 다음 해당 버전 정보를 package.egg-info
배포 메타 데이터를 저장하는 파일 세트의 폴더에 저장합니다.
버전 메타 데이터를 업데이트하는 프로세스에 대한 참고 사항 :
pbr을 사용하여 git에서 버전 데이터를 가져 오지 않는다면 setup.cfg를 새 버전 정보로 직접 업데이트하십시오 (쉽지만 릴리스 프로세스의 표준 부분인지 확인하십시오).
git을 사용하고 소스 또는 바이너리 배포판을 만들 필요가 없다면 ( 명령 python setup.py sdist
중 하나를 사용하여 python setup.py bdist_xxx
) git repo 정보를 <mypackage>.egg-info
메타 데이터 폴더 로 업데이트하는 가장 간단한 방법 은 python setup.py install
명령을 실행하는 것 입니다. 이것은 git repo에서 메타 데이터 가져 오기와 관련된 모든 PBR 기능을 실행하고 로컬 .egg-info
폴더를 업데이트하고 , 정의한 진입 점에 대한 스크립트 실행 파일을 설치하고,이 명령을 실행할 때 출력에서 볼 수있는 다른 기능을 실행합니다.
이 .egg-info
폴더는 일반적으로 소스에서 생성 될 수 있기 때문에 표준 Python .gitignore
파일 (예 : Gitignore.IO ) 로 git repo 자체에 저장되지 않습니다 . 제외 된 경우, 릴리스 전에 메타 데이터를 로컬로 업데이트하기위한 표준 "릴리스 프로세스"가 있는지 확인하고 PyPi.org에 업로드하거나 배포하는 패키지에는이 데이터가 포함되어 있어야 올바른 버전을 사용할 수 있습니다. 당신이 원하는 경우 힘내 (예 : 추가, 당신이 무시되는 특정 파일을 제외 할 수 있습니다이 정보를 포함 REPO !*.egg-info/PKG_INFO
에 .gitignore
)
스크립트에서 버전에 액세스
패키지 자체의 Python 스크립트 내 현재 빌드에서 메타 데이터에 액세스 할 수 있습니다. 예를 들어 버전의 경우 지금까지 내가 찾은 몇 가지 방법이 있습니다.
## This one is a new built-in as of Python 3.8.0 should become the standard
from importlib-metadata import version
v0 = version("mypackage")
print('v0 {}'.format(v0))
## I don't like this one because the version method is hidden
import pkg_resources # part of setuptools
v1 = pkg_resources.require("mypackage")[0].version
print('v1 {}'.format(v1))
# Probably best for pre v3.8.0 - the output without .version is just a longer string with
# both the package name, a space, and the version string
import pkg_resources # part of setuptools
v2 = pkg_resources.get_distribution('mypackage').version
print('v2 {}'.format(v2))
## This one seems to be slower, and with pyinstaller makes the exe a lot bigger
from pbr.version import VersionInfo
v3 = VersionInfo('mypackage').release_string()
print('v3 {}'.format(v3))
__init__.py
다른 답변과 마찬가지로 패키지 중 하나를 패키지에 직접 넣어서 버전 정보를 다음과 같이 추출 할 수 있습니다 .
__all__ = (
'__version__',
'my_package_name'
)
import pkg_resources # part of setuptools
__version__ = pkg_resources.get_distribution("mypackage").version