python-poetry/poetry · error · IndexError
Repository "{name}" does not exist.
Error message
Repository "{name}" does not exist. What it means
Raised by RepositoryPool._get_prioritized_repository when no repository with the given (lowercased) name is registered (repository_pool.py:124-128). It is triggered by repository(name) and get_priority(name), and commonly surfaces when a dependency declares a source_name that is not defined in the project's source list.
Source
Thrown at src/poetry/repositories/repository_pool.py:128
def _contains_priority(self, priority: Priority) -> bool:
return any(
prio_repo.priority is priority for prio_repo in self._repositories.values()
)
def has_repository(self, name: str) -> bool:
return name.lower() in self._repositories
def repository(self, name: str) -> Repository:
return self._get_prioritized_repository(name).repository
def get_priority(self, name: str) -> Priority:
return self._get_prioritized_repository(name).priority
def _get_prioritized_repository(self, name: str) -> PrioritizedRepository:
name = name.lower()
if self.has_repository(name):
return self._repositories[name]
raise IndexError(f'Repository "{name}" does not exist.')
def add_repository(
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
View on GitHub (pinned to 92b74dcfe3)
Solutions
- Add the missing source: `poetry source add <name> <url>`.
- Fix the source name typo on the offending dependency in pyproject.toml.
- Ensure the source entry exists in the config used by the current environment.
Example fix
// before
[tool.poetry.dependencies]
private-lib = { version = "^1.0", source = "privatelib" } # no such source
// after
[[tool.poetry.source]]
name = "privatelib"
url = "https://repo.example.com/simple/"
[tool.poetry.dependencies]
private-lib = { version = "^1.0", source = "privatelib" } Defensive patterns
Strategy: validation
Validate before calling
if not pool.has_repository(source_name):
raise KeyError(
f"source '{source_name}' is not configured; "
"add it via `poetry source add %s <url>" % source_name
)
repo = pool.repository(source_name) Try / catch
try:
repo = pool.repository(source_name)
except IndexError as e:
if "does not exist" in str(e):
log.error("unknown source '%s'; check [[tool.poetry.source]]", source_name)
raise Prevention
- Define every source a dependency references in [[tool.poetry.source]].
- Use `poetry source show` to confirm configured sources before resolving.
- Keep source names consistent across environments/CI.
When it happens
Trigger: pool.repository('foo') / pool.get_priority('foo') when 'foo' was never added; or a dependency with source_name='foo' resolved through find_packages while 'foo' is not in the pool.
Common situations: A [[tool.poetry.source]] entry was removed/renamed but a dependency still references the old name; a typo in the source name on a dependency; source added to one environment config but not another.
Related errors
- A repository with name {repository_name} was already added.
- Key {'.'.join(keys)} not in config
- Key {'.'.join(keys)} not in config
- You must pass exactly 1 value
- Invalid build config setting '{value}'. It must be a valid J
AI-assisted analysis of python-poetry/poetry@92b74dcfe3 (2026-08-04).
Data as JSON: /data/errors/caa7d232e9027559.json.
Report an issue: GitHub.