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

  1. Add the missing source: `poetry source add <name> <url>`.
  2. Fix the source name typo on the offending dependency in pyproject.toml.
  3. 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

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


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