You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python keyring.get_credential()返回None问题求助

问题分析与解决方案

你的代码中get_credential("KRDemo", None)返回None,核心原因是Linux Mint 20.3默认使用的密钥环后端(通常是Secret Service,依赖GNOME Keyring)对set_password和get_credential的交互支持有细节差异:

  • set_password仅存储了「服务名-用户名-密码」的映射,但部分后端不会将该条目标记为可通过「服务名+空用户名」枚举的凭据对象;
  • get_credential(service, None)需要后端支持枚举该服务下的所有凭据条目,而仅用set_password存储的条目可能不符合后端的识别规则。

解决步骤

1. 确认当前密钥环后端

先运行以下命令检查你正在使用的keyring后端:

python -c "import keyring; print(keyring.get_keyring())"

如果输出是keyring.backends.SecretService.Keyring,说明使用的是Secret Service后端,对应以下解决方案。

2. 使用set_credential存储完整凭据

改用set_credential方法直接存储包含用户名和密码的凭据对象,而不是单独存储密码。修改后的代码如下:

import keyring
from keyring.credentials import SimpleCredential

# 存储完整凭据
keyring.set_credential("KRDemo", "user01", SimpleCredential("user01", "password"))

# 读取密码
pw = keyring.get_password("KRDemo", "user01")
print("Password:", pw)

# 读取完整凭据
cr = keyring.get_credential("KRDemo", None)
if cr is not None:
    print("Username:", cr.username)
    print("Password:", cr.password)

这个方法会将凭据以后端可识别的完整对象形式存储,确保get_credential能正确枚举。

3. 检查密钥环条目(可选)

你可以安装seahorse工具(GNOME密钥环管理器),查看密钥环中是否存在KRDemo对应的条目:

sudo apt install seahorse

打开后检查「登录」密钥环下的条目,确认KRDemo条目是否包含用户名信息。如果之前用set_password存储的条目,可能仅显示密码,没有关联用户名,导致get_credential无法识别。

4. 升级keyring版本

旧版本的keyring可能存在后端兼容问题,执行以下命令升级到最新版:

pip install --upgrade keyring

内容的提问来源于stack exchange,提问作者rdanter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 10:47:42