python-poetry/poetry · error · PoetryKeyringError
Unable to retrieve the password for {name} from the key ring
Error message
Unable to retrieve the password for {name} from the key ring {e} What it means
PoetryKeyring.get_password wraps keyring.get_password(name, username) and, on RuntimeError or keyring.errors.KeyringError, raises PoetryKeyringError carrying the underlying exception text. It means the OS/secret-service keyring rejected or failed the read of a stored credential.
Source
Thrown at src/poetry/utils/password_manager.py:107
logger.debug("Accessing keyring %s failed", name, exc_info=True)
if credential:
return HTTPAuthCredential(
username=credential.username, password=credential.password
)
return HTTPAuthCredential(username=username, password=None)
def get_password(self, name: str, username: str) -> str | None:
import keyring
import keyring.errors
name = self.get_entry_name(name)
try:
return keyring.get_password(name, username or self._EMPTY_USERNAME_KEY)
except (RuntimeError, keyring.errors.KeyringError) as e:
raise PoetryKeyringError(
f"Unable to retrieve the password for {name} from the key ring {e}"
)
def set_password(self, name: str, username: str, password: str) -> None:
import keyring
import keyring.errors
name = self.get_entry_name(name)
try:
keyring.set_password(name, username or self._EMPTY_USERNAME_KEY, password)
except (RuntimeError, keyring.errors.KeyringError) as e:
raise PoetryKeyringError(
f"Unable to store the password for {name} in the key ring: {e}"
)
def delete_password(self, name: str, username: str) -> None:
import keyring.errorsView on GitHub (pinned to 92b74dcfe3)
Solutions
- Unlock the OS keyring/keychain and ensure the Secret Service / D-Bus session is available.
- On headless/CI hosts, disable the keyring (`poetry config keyring.enabled false`) and pass credentials via env vars or config.
- Retry after restarting the keyring daemon.
- Confirm PoetryKeyring.is_available() returns true in that environment before relying on it.
Example fix
# before - relying on keyring in CI poetry config http-basic.acme $USER $TOKEN # tries keyring, fails # after - disable keyring, use env / config in CI poetry config keyring.enabled false poetry config http-basic.acme "$USER" "$TOKEN"
Defensive patterns
Strategy: try-catch
Validate before calling
from poetry.utils.password_manager import PoetryKeyring
# only attempt keyring reads when a backend is usable
if not PoetryKeyring.is_available():
raise RuntimeError('keyring unavailable; use env/config credentials') Try / catch
from poetry.utils.password_manager import PoetryKeyringError
try:
pw = manager.get_password(name, username)
except PoetryKeyringError:
# fall back to env var / config
import os
pw = os.environ.get('POETRY_HTTP_BASIC_<REPO>_PASSWORD') Prevention
- Run PoetryKeyring.preflight_check / is_available() before relying on keyring.
- Prefer env vars for credentials in CI/headless environments.
- Keep the OS keyring unlocked in interactive sessions.
When it happens
Trigger: PasswordManager.get_password / get_http_credentials for a configured source when the keyring backend errors: GNOME Keyring locked, Secret Service/D-Bus unavailable, macOS Keychain locked, or a backend crash.
Common situations: Running over SSH without a D-Bus session; headless CI where the keyring is locked or absent; SELinux/AppArmor blocking keyring access; keyring daemon crashed.
Related errors
- Unable to store the password for {name} in the key ring: {e}
- Unable to delete the password for {name} from the key ring
- Access to keyring was requested, but it is not available
- HTTP Error {e.response.status_code}: {e.response.reason} | {
- <error>Failed to clone <info>{url}</>, check your git config
AI-assisted analysis of python-poetry/poetry@92b74dcfe3 (2026-08-04).
Data as JSON: /data/errors/a470447c68d93d59.json.
Report an issue: GitHub.