Skip to main content
Yanked

This release has been yanked by its maintainers, and will be ignored by installers, except when explicitly specified.
Consider using release 24.11.0 instead.
Reason given by maintainers: https://github.com/twisted/incremental/issues/100

gha pypi coverage

Incremental is a small library that versions your Python projects.

API documentation can be found here.

Quick Start

Using setuptools

Add Incremental to your pyproject.toml:

[build-system]
requires = [
    "setuptools",
    "incremental>=24.7.0",  # ← Add incremental as a build dependency
]
build-backend = "setuptools.build_meta"

[project]
name = "<projectname>"
dynamic = ["version"]     # ← Mark the version dynamic
dependencies = [
    "incremental>=24.7.0",  # ← Depend on incremental at runtime
]
# ...

[tool.incremental]        # ← Activate Incremental's setuptools plugin

It’s fine if the [tool.incremental] table is empty, but it must be present.

Remove any [project] version = entry and any [tool.setuptools.dynamic] version = entry.

Next, initialize the project.

Using Hatchling

If you’re using Hatchling to package your project, activate Incremental’s Hatchling plugin by altering your pyproject.toml:

[build-system]
requires = [
    "hatchling",
    "incremental>=24.7.0",  # ← Add incremental as a build dependency
]
build-backend = "hatchling.build"

[project]
name = "<projectname>"
dynamic = ["version"]     # ← Mark the version dynamic
dependencies = [
    "incremental>=24.7.0",  # ← Depend on incremental at runtime
]
# ...

[tool.hatch.version]
source = "incremental"    # ← Activate Incremental's Hatchling plugin

Incremental can be configured as usual in an optional [tool.incremental] table.

The hatch version command will report the Incremental-managed version. Use the python -m incremental.update command to change the version (setting it with hatch version is not supported).

Next, initialize the project.

Using setup.py

Incremental may be used from setup.py instead of pyproject.toml. Add this to your setup() call, removing any other versioning arguments:

setup(
    use_incremental=True,
    setup_requires=['incremental'],
    install_requires=['incremental'], # along with any other install dependencies
    ...
}

Then initialize the project.

Initialize the project

Install Incremental to your local environment with pip install incremental[scripts]. Then run python -m incremental.update <projectname> --create. It will create a file in your package named _version.py like this:

from incremental import Version

__version__ = Version("<projectname>", 24, 1, 0)
__all__ = ["__version__"]

Then, so users of your project can find your version, in your root package’s __init__.py add:

from ._version import __version__

Subsequent installations of your project will then use Incremental for versioning.

Incremental Versions

incremental.Version is a class that represents a version of a given project. It is made up of the following elements (which are given during instantiation):

  • package (required), the name of the package this Version represents.

  • major, minor, micro (all required), the X.Y.Z of your project’s Version.

  • release_candidate (optional), set to 0 or higher to mark this Version being of a release candidate (also sometimes called a “prerelease”).

  • post (optional), set to 0 or higher to mark this Version as a postrelease.

  • dev (optional), set to 0 or higher to mark this Version as a development release.

You can extract a PEP-440 compatible version string by using the .public() method, which returns a str containing the full version. This is the version you should provide to users, or publicly use. An example output would be "13.2.0", "17.1.2dev1", or "18.8.0rc2".

Calling repr() with a Version will give a Python-source-code representation of it, and calling str() on a Version produces a string like '[Incremental, version 16.10.1]'.

Updating

Incremental includes a tool to automate updating your Incremental-using project’s version called incremental.update. It updates the _version.py file and automatically updates some uses of Incremental versions from an indeterminate version to the current one. It requires click from PyPI.

python -m incremental.update <projectname> will perform updates on that package. The commands that can be given after that will determine what the next version is.

  • --newversion=<version>, to set the project version to a fully-specified version (like 1.2.3, or 17.1.0dev1).

  • --rc, to set the project version to <year-2000>.<month>.0rc1 if the current version is not a release candidate, or bump the release candidate number by 1 if it is.

  • --dev, to set the project development release number to 0 if it is not a development release, or bump the development release number by 1 if it is.

  • --patch, to increment the patch number of the release. This will also reset the release candidate number, pass --rc at the same time to increment the patch number and make it a release candidate.

  • --post, to set the project postrelease number to 0 if it is not a postrelease, or bump the postrelease number by 1 if it is. This will also reset the release candidate and development release numbers.

If you give no arguments, it will strip the release candidate number, making it a “full release”.

Incremental supports “indeterminate” versions, as a stand-in for the next “full” version. This can be used when the version which will be displayed to the end-user is unknown (for example “introduced in” or “deprecated in”). Incremental supports the following indeterminate versions:

  • Version("<projectname>", "NEXT", 0, 0)

  • <projectname> NEXT

When you run python -m incremental.update <projectname> --rc, these will be updated to real versions (assuming the target final version is 17.1.0):

  • Version("<projectname>", 17, 1, 0, release_candidate=1)

  • <projectname> 17.1.0rc1

Once the final version is made, it will become:

  • Version("<projectname>", 17, 1, 0)

  • <projectname> 17.1.0

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

incremental-24.7.0.tar.gz (24.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

incremental-24.7.0-py3-none-any.whl (20.0 kB view details)

Uploaded Python 3

File details

Details for the file incremental-24.7.0.tar.gz.

File metadata

  • Download URL: incremental-24.7.0.tar.gz
  • Upload date:
  • Size: 24.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.0 CPython/3.12.4

File hashes

Hashes for incremental-24.7.0.tar.gz
Algorithm Hash digest
SHA256 530255006a8c283d3ad29f30468efc6d5d95747afd0b52a4e4a4ded6348d88f8
MD5 2d99430f279b04f66c1386f66ad7ec2d
BLAKE2b-256 6491a16eadd6a5b0666a2bbfe8921d5c84e6367ccea6cca08d34d260da4fa81f

See more details on using hashes here.

File details

Details for the file incremental-24.7.0-py3-none-any.whl.

File metadata

  • Download URL: incremental-24.7.0-py3-none-any.whl
  • Upload date:
  • Size: 20.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.1.0 CPython/3.12.4

File hashes

Hashes for incremental-24.7.0-py3-none-any.whl
Algorithm Hash digest
SHA256 6ac3c74ae4586cc68bd4adc060619779aaf1262d3581aab75f82c9f311458a99
MD5 2579d4a4a361c60fc9dc7cc2fecdfb32
BLAKE2b-256 f80c2e1762d2c1277524be7ba184156152a442e15e725266607d6a3a97cad77b

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page