공유 Django 응용 프로그램에 의미 버전 제어를 사용하는 방법


Django를 사용하여 웹 사이트를 구축할 때 소프트웨어 버전을 추적할 필요가 없습니다.Git 저장소에 안정적인 분기만 있으면 언제든지 운영 환경을 업데이트할 수 있습니다.그러나 Django 응용 프로그램이나 패키지를 만들고 여러 사이트에서 공유하면 여러 사람과 공유할 수 있을 때 패키지의 버전을 추적하는 것이 중요하다.

좋은 점


버전 제어를 통해 패키지의 특정 상태를 식별할 수 있으며 다음과 같은 이점이 있습니다.
  • 개발자는 어떤 소프트웨어 패키지 버전이 그들의 사이트와 완벽하게 협동하여 일을 할 수 있는지 알 수 있다.
  • 소스 커뮤니티나 기술 지원과 소통할 때 어떤 버전의 버그나 기능을 추적할 수 있습니다.
  • 문서에서 소프트웨어 버전을 명확하게 볼 수 있습니다.
  • 특정 버전의 버그를 복구할 때 버전 패키지의 개발자가 버전 제어를 제출할 때 검사해야 하는 코드의 범위가 비교적 작다.
  • 버전 번호로만 볼 때 업그레이드는 오류만 복구할 수 있는 것이 분명하며 소프트웨어가 호환될 수 있도록 더 많은 주의가 필요합니다.
  • 다른 개발자와 특정한 소프트웨어 패키지에 대해 이야기할 때 당신은 무엇을 이야기하고 있는지 명확하게 설명할 수 있다(네, 개발자가 소프트웨어 버전에 대해 자주 이야기한다)😅).
  • 의미 버전 제어


    가장 유행하는 버전 제어 방안은 semantic versioning이다.이 판본은 점으로 구분된 세 개의 숫자로 구성되어 있다.Django 프레임워크도 사용하고 있습니다.예를 들어 본문을 작성할 때 가장 최근의 안정적인 버전은 3.2.9이다.의미 버전 제어에서 첫 번째 숫자는 주요 버전이고 두 번째 버전은 부차적인 버전이며 세 번째 버전은 패치 버전이다:MAJOR.MINOR.PATCH.
  • MAJOR 버전은 이전 버전과 호환되지 않는 기능을 도입했다.
  • MINOR 버전은 이전 버전과 호환되는 기능을 추가했습니다.
  • PATCH 버전은 이전 버전과 호환되는 버그 복구에 사용됩니다.
  • alpha,beta,발표 후보rc1,rc2 등에도 일부 버전 제어 이상값이 존재할 수 있지만 본고에서 소개하지 않겠습니다.
    소프트웨어 패키지의 버전은 myapp/__init__.py 변수로 __version__ 파일에 저장됩니다. 예를 들어:
    __version__ = "0.2.4"
    
    또한 setup.py, README.md, CHANGELOG.md 및 더 많은 파일에 저장됩니다.

    변경 로그


    Django 응용 프로그램이나 다른 Python 패키지를 개발하여 다른 개발자와 공유할 때 changelog 를 사용하는 것을 권장합니다.일반적으로 패키지의 특정 버전 사이에 사용된 기능, 오류, 추천하지 않음을 보여 주는 가격 인하 기반 문서입니다.
    좋은 변경 로그는 '미발표' 부분에서 시작하고, 그 다음은 각 버전의 부분으로, 순서가 상반된다.각 장에는 범주별로 그룹화된 변경 목록이 있습니다.
  • 증가
  • 변경
  • 폐기
  • 제거됨
  • 고정
  • 안전
  • 이것은 CHANGELOG.md의 시작 템플릿일 수 있습니다.
    Changelog
    =========
    
    All notable changes to this project will be documented in this file.
    
    The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
    and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
    
    
    [Unreleased]
    ------------
    
    
    <!--
    ### Added
    ### Changed
    ### Deprecated
    ### Removed
    ### Fixed
    ### Security
    -->
    
    새 버전이 발표되면 Unreleased 부분을 대체하고 그 위에 새로운 Unreleased 부분을 만들 것이다.예를 들면 다음과 같습니다.
    [Unreleased]
    ------------
    
    ### Added
    
    - Logging the cookie consent choices in the database because of the legal requirements.
    
    ### Fixed
    
    - Disabling the buttons while saving the Cookie Choices so that they are not triggered more than once with slow Internet connections.
    
    
    이렇게 됩니다.
    [Unreleased]
    ------------
    
    [v0.2.0] - 2021-10-27
    ------------------
    
    ### Added
    
    - Logging the cookie consent choices in the database because of the legal requirements.
    
    ### Fixed
    
    - Disabling the buttons while saving the Cookie Choices so that they are not triggered more than once with slow Internet connections.
    
    
    수동으로 버전을 추적하는 것은 상당히 지루한 작업이며, 파일이나 버전 번호가 일치하지 않는 것을 잊어버릴 수도 있다.이 점을 해낼 수 있는 실용적인 도구가 있어서 기쁘다. bump2version 라고 한다.

    bump2version 사용


    장치


    pip의 표준 방법을 사용하여 bump2version 유틸리티를 가상 환경에 설치합니다.
    (env)$ pip install bump2version
    

    준비 작업


    패키지의 __init__.py 파일에서 버전 설정0.0.0:
    __version__ = "0.0.0"
    
    다른 언급해야 할 모든 파일에서 버전을 0.0.0, 예를 들어 README.mdsetup.py로 설정합니다.
    그런 다음 를 사용하여 생성setup.cfg합니다.
    [bumpversion]
    current_version = 0.0.0
    commit = True
    tag = True
    
    [bumpversion:file:setup.py]
    search = version="{current_version}"
    replace = version="{new_version}"
    
    [bumpversion:file:myapp/__init__.py]
    search = __version__ = "{current_version}"
    replace = __version__ = "{new_version}"
    
    [bumpversion:file:README.md]
    search = django_myapp-{current_version}-py2.py3-none-any.whl
    replace = django_myapp-{new_version}-py2.py3-none-any.whl
    
    [bumpversion:file:CHANGELOG.md]
    search = 
        [Unreleased]
        ------------
    replace = 
        [Unreleased]
        ------------
    
        [v{new_version}] - {utcnow:%%Y-%%m-%%d}
        ------------------
    
    [bdist_wheel]
    universal = 1
    
    "django 앱으로"django my app"과"my app"를 교체하세요.더 많은 파일이 있으면 패키지 버전을 언급하십시오. setup.cfg 에서 비슷한 버전이 바뀌었는지 확인하십시오.
    변경 사항을 커밋하여 Git 저장소로 밀어넣습니다.

    사용법


    새 버전을 만들 때마다 셸에 다음을 입력합니다.
    $ bump2version patch
    
    또는
    $ bump2version minor
    
    또는
    $ bump2version major
    
    그런 다음 패키지를 생성하는 명령입니다.
    $ python3 setup.py sdist bdist_wheel
    
    앞에서 말한 바와 같이 patch는 오류를 복구하는 데 사용되고 minor는 뒤로 호환되지 않는 변경에 사용되며 major는 뒤로 호환되지 않는 변경에 사용된다.bump2version 명령은 setup.cfg의 구성을 사용하고 다음을 수행합니다.
  • 현재 버전 번호를 전달하는 매개 변수에 따라 증가합니다.
  • 이전 버전은 setup.py, myapp/__init__.pyREADME.md의 새 버전으로 교체됩니다.
  • CHANGELOG.md의 정확한 버전 제어를 책임진다.
  • 그리고 변경 사항을 제출하고 그 패턴vMAJOR.MINOR.PATCH에 따라 표시를 만듭니다.
  • 자세한 내용


    주의해야 할 두 가지가 있다.
    우선 가격 인하에는 두 가지 방법으로 제목을 설정할 수 있습니다.
    Changelog
    =========
    
    [Unreleased]
    ------------
    
    과 동일
    # Changelog
    
    ## [Unreleased]
    
    일반적으로 나는 두 번째 형식으로 표시하지만 setup.cfg의 대체 함수는 # 기호가 있는 줄을 주석으로 간주하고 전의도 작용하지 않는다.
    예를 들어 이것은 통하지 않는다.
    [bumpversion:file:CHANGELOG.md]
    search = 
        ## [Unreleased]
    replace = 
        ## [Unreleased]
    
        ## [v{new_version}] - {utcnow:%%Y-%%m-%%d}
    
    만약 누군가가 간단한 해결 방안을 알고 있거나 찾았을 뿐만 아니라, 가격 인하 폭도 더욱 짧다면, 저에게 알려 주십시오.
    그 다음으로 setup.cfg 대신 .bumpversion.cfg 파일을 사용할 수 있지만 이 파일은 숨겨져 있기 때문에 꾸준히 사용하시기를 권장합니다setup.cfg.

    마지막 말


    최근에 Gumroad에서 발표한 비용 지불 Django GDPR Cookie Consent 프로그램에서 이런 종류의 의미 버전 제어 설정을 볼 수 있습니다.
    즐거운 프로그래밍!
    표지 사진 작성자Jacob Campbell

    좋은 웹페이지 즐겨찾기