python-poetry/poetry · error · PackageNotFoundError
Package {name} ({version}) not found.
Error message
Package {name} ({version}) not found. What it means
Raised by the base Repository.package when no in-memory package matches both the canonical name and exact version (repository.py:108-114). This is the generic lookup miss for repositories that hold a fixed set of packages (e.g. LockedRepository or an in-memory/test repository), not for remote HTTP repositories.
Source
Thrown at src/poetry/repositories/repository.py:114
]
def _log(self, msg: str, level: str = "info") -> None:
logger = logging.getLogger(f"{__name__}.{self.__class__.__name__}")
getattr(logger, level)(f"<c1>Source ({self.name}):</c1> {msg}")
def __len__(self) -> int:
return len(self._packages)
def find_links_for_package(self, package: Package) -> list[Link]:
return []
def package(self, name: str, version: Version) -> Package:
canonicalized_name = canonicalize_name(name)
for package in self.packages:
if canonicalized_name == package.name and package.version == version:
return package
raise PackageNotFoundError(f"Package {name} ({version}) not found.")
def log_age_filtered_versions(self, *, level: str, reset: bool) -> None:
"""Log package versions that were ignored due to solver.min-release-age.
Must be overridden in Repository classes that support filtering by release age.
Args:
level: The log level to use (e.g. "info", "warning").
reset: If True, clear the recorded filtered versions after logging.
"""
View on GitHub (pinned to 92b74dcfe3)
Solutions
- Refresh the lock with `poetry lock --no-update` or `poetry lock`.
- Confirm the package/version is actually in repository.packages before calling .package().
- If using a custom Repository, ensure it is populated with the packages you query.
Defensive patterns
Strategy: validation
Validate before calling
from poetry.core.constraints.version import Version
target = (canonicalize_name(name), version)
if not any((p.name, p.version) == target for p in repository.packages):
raise KeyError(f"{name} {version} not in repository; refresh lock")
pkg = repository.package(name, version) Try / catch
from poetry.repositories.exceptions import PackageNotFoundError
try:
pkg = repository.package(name, version)
except PackageNotFoundError:
log.warning("%s %s missing from %s; re-lock", name, version, repository.name)
raise Prevention
- Keep poetry.lock committed and in sync with pyproject.toml.
- Run `poetry lock --no-update` after dependency edits.
- Validate against repository.packages before exact-version lookups.
When it happens
Trigger: Calling repo.package(name, version) on a LockedRepository whose lock does not contain that package/version, or on any Repository subclass that relies on the default package() implementation.
Common situations: Lock file out of sync with pyproject.toml; querying a repository object that was populated for a different package set; programmatic use of a custom Repository.
Related errors
- No valid distribution links found for package: "{data.name}"
- Package [{name}] not found.
- Package [{name}] not found.
- Package {package} not found
- No lockfile found. Unable to read locked packages
AI-assisted analysis of python-poetry/poetry@92b74dcfe3 (2026-08-04).
Data as JSON: /data/errors/c73aa4b9692cd042.json.
Report an issue: GitHub.