在cx_Freeze/PyInstaller中用Keyring遇无推荐后端错误,求keyrings.alt用法
解决keyring打包后"No recommended backend was available"报错问题
我来帮你搞定这个打包后运行keyring报错的问题!这个错误的核心原因是:不管用cx_Freeze还是PyInstaller,打包工具默认不会自动包含keyring的可选后端依赖,当程序在打包后的环境里找不到系统默认的密钥管理后端时,就会抛出这个提示。keyrings.alt就是用来提供备选后端的,下面是具体的解决步骤:
1. 先安装keyrings.alt包
首先确保你的开发环境里已经安装了这个备选后端包,执行命令:
pip install keyrings.alt
2. 调整打包配置(分工具处理)
针对cx_Freeze
你需要在setup.py里明确指定要包含keyring和keyrings.alt的模块,避免打包时被遗漏。下面是一个示例配置:
from cx_Freeze import setup, Executable # 定义可执行文件 target_exe = Executable( script="target.py", base="Win32GUI" # 如果是GUI程序才加,控制台程序可以去掉 ) setup( name="YourAppName", version="1.0", executables=[target_exe], options={ "build_exe": { # 包含核心包 "packages": ["keyring", "keyrings.alt"], # 明确包含需要的后端模块(file后端是跨平台通用的,优先选这个) "includes": ["keyrings.alt.backends.file"], # 如果是Windows系统,还可以加上win32后端增强兼容性 # "includes": ["keyrings.alt.backends.file", "keyrings.alt.backends.win32"] } } )
针对PyInstaller
有两种方式可以确保依赖被打包进去:
方式一:命令行直接指定隐藏导入
打包时用--hidden-import参数手动添加需要的模块:
pyinstaller target.py --hidden-import keyring --hidden-import keyrings.alt --hidden-import keyrings.alt.backends.file
如果是Windows系统,同样可以加上--hidden-import keyrings.alt.backends.win32来增强兼容性。
方式二:修改.spec文件
如果已经生成了.spec文件,直接在hiddenimports列表里添加依赖:
a = Analysis( ['target.py'], pathex=[], binaries=[], datas=[], hiddenimports=['keyring', 'keyrings.alt', 'keyrings.alt.backends.file'], hookspath=[], hooksconfig={}, runtime_hooks=[], excludes=[], win_no_prefer_redirects=False, win_private_assemblies=False, cipher=None, noarchive=False, ) # 其他配置...
额外提示
keyrings.alt提供的file后端是跨平台的,会把密钥存储在本地加密文件里,虽然安全性不如系统原生的密钥管理服务,但能保证你的exe在任何系统上都能正常运行。如果是特定平台的程序,可以针对性地添加对应后端(比如Windows的win32、Linux的SecretService等)。
内容的提问来源于stack exchange,提问作者tokawa
相关产品推荐
相关产品推荐

