python-poetry/poetry · error · ValueError

The project's version doesn't seem to follow semver

Error message

The project's version doesn't seem to follow semver

What it means

ValueError from `increment_version` (version.py:94-97) when `Version.parse(version)` raises `InvalidVersionError`. The current project version stored in pyproject.toml is not parseable as a (PEP 440 / semver) version, so no bump rule can be applied.

Source

Thrown at src/poetry/console/commands/version.py:97

            if self.option("short"):
                self.line(self.poetry.package.pretty_version)
            else:
                self.line(
                    f"<comment>{self.poetry.package.pretty_name}</>"
                    f" <info>{self.poetry.package.pretty_version}</>"
                )

        return 0

    def increment_version(
        self, version: str, rule: str, next_phase: bool = False
    ) -> Version:
        from poetry.core.constraints.version import Version

        try:
            parsed = Version.parse(version)
        except InvalidVersionError:
            raise ValueError("The project's version doesn't seem to follow semver")

        if rule in {"major", "premajor"}:
            new = parsed.next_major()
            if rule == "premajor":
                new = new.first_prerelease()
        elif rule in {"minor", "preminor"}:
            new = parsed.next_minor()
            if rule == "preminor":
                new = new.first_prerelease()
        elif rule in {"patch", "prepatch"}:
            new = parsed.next_patch()
            if rule == "prepatch":
                new = new.first_prerelease()
        elif rule == "prerelease":
            if parsed.is_unstable():
                pre = parsed.pre
                assert pre is not None
                pre = pre.next_phase() if next_phase else pre.next()

View on GitHub (pinned to 92b74dcfe3)

Solutions

  1. Set a valid PEP 440 version in pyproject.toml, e.g. `version = "1.2.3"`.
  2. Strip prefixes/suffixes like `v` or `+build` that are not PEP 440 compliant (or convert to valid local version segments).
  3. Run `poetry version <new-version>` with an explicit valid version instead of a bump rule.

Example fix

# before
# pyproject.toml: version = "v1.0"
# after
# pyproject.toml: version = "1.0.0"
Defensive patterns

Strategy: validation

Validate before calling

from poetry.core.constraints.version import Version
from poetry.core.version.exceptions import InvalidVersionError
current = poetry.package.pretty_version
try:
    Version.parse(current)
except InvalidVersionError:
    raise SystemExit(f"{current!r} is not a PEP 440 version; fix pyproject.toml")

Type guard

def is_pep440_version(value: str) -> bool:
    from poetry.core.constraints.version import Version
    from poetry.core.version.exceptions import InvalidVersionError
    try:
        Version.parse(value)
        return True
    except InvalidVersionError:
        return False

Prevention

When it happens

Trigger: Running `poetry version patch` (or any rule) when `[project] version` / `[tool.poetry] version` holds a non-PEP 440 string like `1.0` is fine, but `v1.0-rc1` style or `latest` is not.

Common situations: Manually edited version field with a non-conformant string; inheriting a project from another ecosystem (CalVer, git-describe strings).

Related errors


AI-assisted analysis of python-poetry/poetry@92b74dcfe3 (2026-08-04). Data as JSON: /data/errors/c5e664f352f35aa3.json. Report an issue: GitHub.