pkg_resources.working_set出现以'-'开头的包,求成因及清理方案
关于Python中以'-'开头的异常条目及cffi升级报错的疑问
我来帮你拆解这两个问题:
那些以'-'开头的"条目"是什么?
这些看起来奇怪的['-fi', '-', '-.fi', '-ffi']并不是真正的Python包,它们是pkg_resources工作集缓存里的异常残留条目。这类情况通常出现在pip处理带编译扩展的包(比如cffi,它会生成_cffi_backend.pyd这类二进制扩展文件)时,因为外部干扰(比如你提到的杀毒软件)导致安装/升级流程中断,使得pkg_resources没有正确更新它的包索引缓存,留下了这些残缺的、格式异常的条目。
异常条目和cffi升级报错的关联?
没错,这些异常条目就是你升级cffi时那个权限报错导致的。当pip尝试升级cffi时,需要先卸载旧版本的_cffi_backend.pyd文件,但杀毒软件拦截了这个删除操作(WinError 5是权限被拒绝)——虽然最终cffi的新版本还是安装成功了,但这个中断的卸载流程让pkg_resources的工作集缓存出现了混乱,生成了这些奇怪的开头为'-'的条目。
如何清理这些异常条目?
你可以按照以下步骤来修复:
- 清理pip缓存:运行下面的命令删除pip的临时缓存文件,避免残留的安装文件干扰:
pip cache purge - 重置pkg_resources缓存:因为
pkg_resources是setuptools的一部分,升级setuptools会自动重置它的包索引缓存:python -m pip install --upgrade setuptools - 验证结果:重新运行你原来的代码,检查这些异常条目是否消失:
import pkg_resources print([d.key for d in pkg_resources.working_set if d.key[0] == "-"])
如果还是存在,可以尝试手动删除Python环境下的__pycache__文件夹,或者重启你的Python解释器,确保缓存完全刷新。
另外,关于cffi升级的报错,既然你无法禁用杀毒软件,以后可以加上--user参数来安装,这样会把包安装到当前用户的目录下,不需要系统级权限,能避免大部分权限相关的报错:
pip install --upgrade --user cffi
内容的提问来源于stack exchange,提问作者lucatrv
相关产品推荐
相关产品推荐

