python-poetry/poetry · error · IndexError
RepositoryPool can not remove unknown repository '{name}'.
Error message
RepositoryPool can not remove unknown repository '{name}'. What it means
Raised by RepositoryPool.remove_repository when the name is not present in the pool (repository_pool.py:147-152). It guards against silently no-oping on a typo'd removal.
Source
Thrown at src/poetry/repositories/repository_pool.py:149
self, repository: Repository, *, priority: Priority = Priority.PRIMARY
) -> RepositoryPool:
"""
Adds a repository to the pool.
"""
repository_name = repository.name.lower()
if self.has_repository(repository_name):
raise ValueError(
f"A repository with name {repository_name} was already added."
)
self._repositories[repository_name] = PrioritizedRepository(
repository, priority
)
return self
def remove_repository(self, name: str) -> RepositoryPool:
if not self.has_repository(name):
raise IndexError(
f"RepositoryPool can not remove unknown repository '{name}'."
)
del self._repositories[name.lower()]
return self
def package(
self, name: str, version: Version, repository_name: str | None = None
) -> Package:
if repository_name:
return self.repository(repository_name).package(name, version)
for repo in self.repositories:
try:
return repo.package(name, version)
except PackageNotFoundError:
continue
raise PackageNotFoundError(f"Package {name} ({version}) not found.")
View on GitHub (pinned to 92b74dcfe3)
Solutions
- Guard the call with pool.has_repository(name) before removing.
- Verify the exact (case-insensitive) name you intend to remove.
- Avoid double-removal by tracking lifecycle state in calling code.
Example fix
// before
pool.remove_repository("myrepo") # may raise if absent
// after
if pool.has_repository("myrepo"):
pool.remove_repository("myrepo") Defensive patterns
Strategy: validation
Validate before calling
if pool.has_repository(name):
pool.remove_repository(name)
else:
log.debug("repository '%s' not in pool; nothing to remove", name) Try / catch
try:
pool.remove_repository(name)
except IndexError as e:
if "unknown repository" in str(e):
log.debug("%s already absent", name)
else:
raise Prevention
- Guard removals with has_repository().
- Track repository lifecycle in calling code to avoid double-removal.
- Treat remove as idempotent in wrappers.
When it happens
Trigger: Calling pool.remove_repository('foo') when 'foo' was never added (or already removed).
Common situations: Programmatic pool manipulation that has lost track of registered names; double-removal; removal of a name that was never added due to a typo.
Related errors
- Setting {self.argument('key')} does not exist
- You can only pass one value.
- "{value}" is an invalid value for {key}
- Group(s) not found: {', '.join(message_parts)}
- Invalid author string. Must be in the format: John Smith <jo
AI-assisted analysis of python-poetry/poetry@92b74dcfe3 (2026-08-04).
Data as JSON: /data/errors/61bb0735c7ad4a69.json.
Report an issue: GitHub.