{"id":"84c571bc4757f3f9","repo":"python-poetry/poetry","slug":"unable-to-store-the-password-for-name-in-the-key","errorCode":null,"errorMessage":"Unable to store the password for {name} in the key ring: {e}","messagePattern":"Unable to store the password for (.+?) in the key ring: (.+?)","errorType":"exception","errorClass":"PoetryKeyringError","httpStatus":null,"severity":"error","filePath":"src/poetry/utils/password_manager.py","lineNumber":120,"sourceCode":"        name = self.get_entry_name(name)\n\n        try:\n            return keyring.get_password(name, username or self._EMPTY_USERNAME_KEY)\n        except (RuntimeError, keyring.errors.KeyringError) as e:\n            raise PoetryKeyringError(\n                f\"Unable to retrieve the password for {name} from the key ring {e}\"\n            )\n\n    def set_password(self, name: str, username: str, password: str) -> None:\n        import keyring\n        import keyring.errors\n\n        name = self.get_entry_name(name)\n\n        try:\n            keyring.set_password(name, username or self._EMPTY_USERNAME_KEY, password)\n        except (RuntimeError, keyring.errors.KeyringError) as e:\n            raise PoetryKeyringError(\n                f\"Unable to store the password for {name} in the key ring: {e}\"\n            )\n\n    def delete_password(self, name: str, username: str) -> None:\n        import keyring.errors\n\n        name = self.get_entry_name(name)\n\n        try:\n            keyring.delete_password(name, username or self._EMPTY_USERNAME_KEY)\n        except (RuntimeError, keyring.errors.KeyringError):\n            raise PoetryKeyringError(\n                f\"Unable to delete the password for {name} from the key ring\"\n            )\n\n    def get_entry_name(self, name: str) -> str:\n        return f\"{self._namespace}-{name}\"\n","sourceCodeStart":102,"sourceCodeEnd":138,"githubUrl":"https://github.com/python-poetry/poetry/blob/92b74dcfe348d0e01e14d40d6c1fa47a4ee04a54/src/poetry/utils/password_manager.py#L102-L138","documentation":"PoetryKeyring.set_password wraps keyring.set_password and, on RuntimeError or keyring.errors.KeyringError, raises PoetryKeyringError with the underlying exception. The credential could not be persisted to the OS/secret-service backend.","triggerScenarios":"Storing a repository password or PyPI token via the keyring when the backend rejects the write: keyring locked, disk full, D-Bus failure, permission denied on the Secret Service collection.","commonSituations":"Locked keychain on first credential save; headless server without an unlocked Secret Service; read-only keyring backend; keyring daemon not running.","solutions":["Unlock the keyring/keychain and verify the Secret Service collection is writable.","Disable keyring in headless environments (`poetry config keyring.enabled false`) and store tokens in config/env.","Restart the keyring daemon and retry.","Check disk space and permissions on the keyring storage."],"exampleFix":"# before\npoetry config pypi-token.pypi pypi-xxxx   # set_password fails on locked keyring\n# after\npoetry config keyring.enabled false\npoetry config pypi-token.pypi pypi-xxxx","handlingStrategy":"try-catch","validationCode":"from poetry.utils.password_manager import PoetryKeyring\n\nif not PoetryKeyring.is_available():\n    raise RuntimeError('keyring unavailable; disable keyring.enabled or use config')","typeGuard":null,"tryCatchPattern":"from poetry.utils.password_manager import PoetryKeyringError\ntry:\n    manager.keyring.set_password(name, username, password)\nexcept PoetryKeyringError:\n    # store via config/env as a fallback\n    manager._config.auth_config_source.add_property(['pypi-token', name], password)","preventionTips":["Ensure the Secret Service collection is unlocked and writable before saving.","Disable keyring.enabled on hosts where no backend is available.","Restart the keyring daemon if saves start failing."],"tags":["keyring","credentials","authentication","persistence"],"analyzedSha":"92b74dcfe348d0e01e14d40d6c1fa47a4ee04a54","analyzedAt":"2026-08-04T20:33:34.072Z","schemaVersion":2}