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
- Set a valid PEP 440 version in pyproject.toml, e.g. `version = "1.2.3"`.
- Strip prefixes/suffixes like `v` or `+build` that are not PEP 440 compliant (or convert to valid local version segments).
- 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
- Keep `version` in pyproject.toml in strict PEP 440 form.
- Avoid `v` prefixes and non-numeric tags.
- Validate the version in pre-commit hooks before `poetry version <rule>`.
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
- Invalid version constraint: {constraint}
- This project requires Poetry {version_constraint}, but you a
- Unable to retrieve the package version for {name}
- Unknown metadata version: {dist.metadata_version}
AI-assisted analysis of python-poetry/poetry@92b74dcfe3 (2026-08-04).
Data as JSON: /data/errors/c5e664f352f35aa3.json.
Report an issue: GitHub.