Pop!_OS系统Python3.8环境下执行pip命令触发macOS keyring插件初始化错误的原因及解决方法
我来帮你拆解这个问题——我之前在Linux系统上也碰到过类似的keyring插件加载问题,其实背后的逻辑很清晰:
为什么各类基础pip命令会触发这个错误?
pip依赖keyring这个跨平台库来处理凭据(比如私有PyPI仓库的密码)的存储和读取。keyring的工作机制是自动扫描并加载所有已注册的后端插件,不管当前运行的是什么操作系统。
在你的Pop!_OS系统上,keyring的插件注册表中依然包含了针对macOS的后端条目,但这个模块显然不存在于Linux系统中,所以当keyring尝试加载它时就会抛出ModuleNotFoundError。好在这个错误只是插件加载失败,并不影响pip的核心功能(比如安装包、列出过时包),所以命令还能正常执行,但错误信息会反复出现。
为什么错误会和macOS相关?
keyring是为跨平台设计的凭据管理库,它为不同操作系统提供了专属的后端实现:
- macOS上使用
keyring.backends.macOS对接系统钥匙串 - Linux上通常用
keyring.backends.SecretService对接GNOME密钥环(Pop!_OS默认支持) - Windows上用
keyring.backends.Windows.WinVault
这些后端会统一注册到keyring的插件系统中,不管你当前用的是什么系统,keyring都会尝试遍历所有注册的后端去加载。这就导致在Linux系统上,它还是会尝试加载专为macOS设计的后端模块,进而触发错误。
解决方法
下面是几种可行的解决方式,按推荐程度排序:
1. 指定Linux专属的keyring后端(推荐)
通过配置文件让keyring只加载适合Linux的后端,避免尝试加载macOS模块:
- 先创建keyring的配置目录:
mkdir -p ~/.config/python_keyring - 创建配置文件
~/.config/python_keyring/keyringrc.cfg,写入以下内容:[backend] default-keyring=keyring.backends.SecretService.Keyring
保存后,再执行pip命令就不会再弹出这个错误了。
2. 重新安装适合Linux的keyring
如果配置文件方法无效,可以尝试重新安装keyring,确保系统上的版本是适配Linux的:
- 先卸载现有版本:
pip3 uninstall keyring - 用系统包管理器安装(更稳定,适配Pop!_OS):
sudo apt install python3-keyring
或者用pip重新安装:
pip3 install keyring
3. 临时禁用keyring(仅临时测试用)
如果只是想快速屏蔽错误信息,不影响当前操作,可以临时设置环境变量让keyring不加载任何后端:
export PYTHON_KEYRING_BACKEND=keyring.backends.null.Keyring
注意:这个方法会让keyring完全失效,如果你需要访问需要凭据的私有PyPI仓库,不要长期使用。
内容的提问来源于stack exchange,提问作者Tim U

