Incremental — это менеджер версий CalVer, поддерживающий будущее.
Документацию по API можно найти здесь. Далее следует описательная документация.
Содержание
Теория работы
Быстрый старт
Использование инструментов настройки
Использование детеныша
Использование setup.py
Инициализировать проект
Интеграция во время выполнения
Дополнительные версии
Обновление
Неопределенные версии
Номер версии имеет форму ГГ.ММ.ПАТЧ.
Если ваш проект называется «Shrubbery», его код находится в shrubbery/
или src/shrubbery/
.
Incremental сохраняет номер версии вашего проекта в {src/}shrubbery/_version.py
.
Чтобы обновить версию, запустите incremental update Shrubbery
, передав --rc
и/или --patch
если это необходимо (см. раздел Обновление ниже).
При изменении версии также обновляются все неопределенные версии в вашей кодовой базе, например «Shrubbery NEXT», поэтому вы можете ссылаться на предстоящий выпуск в документации. Вот как Incremental поддерживает будущее.
Добавьте Incremental в ваш pyproject.toml
:
[build-system]requires = ["setuptools","incremental>=24.7.2", # ← Добавить инкрементальный как зависимость сборки]build-backend = "setuptools.build_meta"[project]name = ""dynamic = ["version"] # ← Отметить динамические зависимости версии = ["incremental>=24.7.2", # ← Зависит от инкрементной версии во время выполнения]# ...[tool.incremental] # ← Активировать плагин setuptools Incremental
Ничего страшного, если таблица [tool.incremental]
пуста, но она должна присутствовать.
Удалите любую [project] version =
запись и любую [tool.setuptools.dynamic] version =
запись.
Далее инициализируйте проект.
Если вы используете Hatchling для упаковки своего проекта, активируйте плагин Incremental Hatchling, изменив свой pyproject.toml
:
[build-system]requires = ["hatchling","incremental>=24.7.2", # ← Добавить инкрементальный как зависимость сборки]build-backend = "hatchling.build"[project]name = ""dynamic = ["version"] # ← Отметить версию динамических зависимостей = ["incremental>=24.7.2", # ← Зависит от инкрементальной во время выполнения]# ...[tool.hatch.version]source = "incremental" # ← Активировать Плагин Incremental Hatchling
Инкрементальный режим можно настроить как обычно в дополнительной таблице [tool.incremental]
.
Команда hatch version
сообщит о версии, управляемой инкрементно. Используйте команду incremental update
, чтобы изменить версию (установка hatch version
не поддерживается).
Далее инициализируйте проект.
setup.py
Incremental можно использовать из setup.py
вместо pyproject.toml
. Добавьте это в вызов setup()
, удалив все остальные аргументы управления версиями:
setup(use_incremental=True,setup_requires=['incremental'],install_requires=['incremental'], # вместе с любыми другими зависимостями установки... }
Затем инициализируйте проект.
Установите инкрементную версию в локальную среду с помощью pipx install incremental
. Затем запустите incremental update
. В вашем пакете будет создан файл с именем _version.py
следующим образом:
из добавочного импорта Version__version__ = Version("<имя проекта>", 24, 1, 0)__all__ = ["__version__"]
При последующих установках вашего проекта для управления версиями будет использоваться инкрементальный режим.
Вы можете предоставить incremental.Version
из _version.py
в API вашего пакета. Для этого добавьте в __init__.py
вашего корневого пакета:
из ._version импортировать __version__
Примечание
Предоставление атрибута __version__
вышло из моды после появления в Python 3.6 функции importlib.metadata.version(), которая может получать версию установленного пакета.
Если вы не публикуете этот объект публично и не используете его в своем пакете, тогда нет необходимости зависеть от Incremental во время выполнения. Вы можете удалить его из массива dependencies
вашего проекта (или, в setup.py
, из install_requires
).
incremental.Version
— это класс, представляющий версию данного проекта. Он состоит из следующих элементов (которые задаются при создании экземпляра):
package
(обязательно), имя пакета, который представляет эта Version
.
major
, minor
, micro
(все обязательно), XYZ Version
вашего проекта.
release_candidate
(необязательно), установите значение 0 или выше, чтобы отметить эту Version
как кандидата на выпуск (также иногда называемую «предварительной версией»).
post
(необязательно), установите значение 0 или выше, чтобы пометить эту Version
как постр-релиз.
dev
(необязательно), установите значение 0 или выше, чтобы пометить эту Version
как версию для разработки.
Вы можете извлечь строку версии, совместимой с PEP-440, с помощью метода .public()
, который возвращает str
содержащую полную версию. Это версия, которую вы должны предоставить пользователям или публично использовать. Пример вывода: "13.2.0"
, "17.1.2dev1"
или "18.8.0rc2"
.
Вызов repr()
с Version
даст представление исходного кода Python, а вызов str()
для Version
создает строку типа '[Incremental, version 16.10.1]'
.
Incremental включает в себя инструмент для автоматизации обновления версии вашего инкрементного проекта, который называется incremental
. Он обновляет файл _version.py
и автоматически обновляет некоторые варианты использования дополнительных версий с неопределенной версии до текущей. Для этого требуется click
из PyPI.
incremental update
выполнит обновления этого пакета. Команды, которые можно дать после этого, определяют, какая будет следующая версия.
--newversion=
, чтобы установить полностью указанную версию проекта (например, 1.2.3 или 17.1.0dev1).
--rc
, чтобы установить версию проекта
, если текущая версия не является кандидатом на выпуск, или увеличить номер кандидата на выпуск на 1, если это так.
--dev
, чтобы установить номер версии разработки проекта на 0, если это не версия разработки, или увеличить номер версии разработки на 1, если это так.
--patch
, чтобы увеличить номер патча выпуска. Это также сбросит номер кандидата на выпуск, одновременно передайте --rc
, чтобы увеличить номер патча и сделать его кандидатом на выпуск.
--post
, чтобы установить номер пострелиза проекта на 0, если это не пострелиз, или увеличить номер пострелиза на 1, если это так. Это также приведет к сбросу номеров версий-кандидатов и разрабатываемых версий.
Если вы не укажете аргументы, он удалит номер кандидата на выпуск, сделав его «полным выпуском».
Инкрементный поддерживает «неопределенные» версии в качестве замены следующей «полной» версии. Это можно использовать, когда версия, которая будет отображаться конечному пользователю, неизвестна (например, «введена в» или «устарела»). Инкрементный поддерживает следующие неопределенные версии:
Version("
Когда вы запускаете incremental update
, они будут обновлены до реальных версий (при условии, что целевая окончательная версия — 17.1.0):
Version("
Как только окончательная версия будет готова, она станет:
Version("