清理 pycharm 无效解释器

article/2025/7/27 20:03:53

1. 起因, 目的:

  • 经常使用 pycharm 来调试深度学习项目,每次新建虚拟环境,都是显示一堆不存在的名称,删也删不掉。 总觉得很烦,是个痛点。决定深入研究一下。

请添加图片描述

2. 先看效果

效果是能行,而且清爽多了。请添加图片描述

3. 过程:

下面是 grok 写的的过程总结: 详细过程在这里

清理 PyCharm 无效解释器的探索与修改过程

问题发现

我在 PyCharm CE 2022.3(Win10 系统)中创建新项目时,发现“Base interpreter”下拉菜单里有一堆标着 [invalid] 的 Python 解释器路径,比如 C:\ProgramData\Anaconda3\envs\Pad\python.exe。这些路径对应的环境早已删除,但 PyCharm 还“记着”它们,挺烦人。我决定清理掉这些无效路径。

初步尝试:清理缓存

一开始,我怀疑是 PyCharm 缓存问题。通过 C:\Users\Administrator\AppData\Local\JetBrains\PyCharmCE2022.3\caches 找到了缓存文件,尝试手动删除 caches 文件夹(rmdir /S /Q caches),并在 PyCharm 中用 File > Invalidate Caches / Restart 清理。但无效路径依然存在,说明问题不在缓存。

找到根源:jdk.table.xml

深入研究后,我发现 PyCharm 的解释器配置存储在 C:\Users\Administrator\AppData\Roaming\JetBrains\PyCharmCE2022.3\options\jdk.table.xml。这是一个 XML 文件,包含所有 <jdk> 条目,每个条目记录一个解释器的 namehomePath。无效路径(比如 [invalid])就在这里。

第一次尝试:手动编辑 XML

我用记事本打开 jdk.table.xml,但文件太长,嵌套结构复杂,很难手动找 [invalid] 路径。我需要一个能展开折叠 XML 的工具。

工具选择:VS Code

我选了 VS Code(装了 XML 插件),因为它轻量且支持展开折叠(Ctrl+K Ctrl+J 展开所有)。打开 jdk.table.xml 后,XML 结构清晰了,但手动删除 <jdk> 条目还是太慢,我想用 Python 自动化。

代码 1:解析 XML, 查看全部的 项目名称和路径

我写了一个 Python 脚本,用 xml.etree.ElementTree 解析 XML,提取 <jdk>namehomePath


import xml.etree.ElementTree as ET# 假设我们要解析的 XML 文件路径(改成你自己的文件路径)
# 完整路径是:
# xml_file = r"C:\Users\Administrator\AppData\Roaming\JetBrains\PyCharmCE2022.3\options\jdk.table.xml"
xml_file = r"jdk.table.xml"# 像打开网页一样,解析 XML 文件
tree = ET.parse(xml_file)
root = tree.getroot()  # 得到 XML 的“根节点”,就像 HTML 的 <html># 遍历所有的 <jdk> 标签,就像找 HTML 里的 <div class="item">
for jdk in root.findall('.//jdk'):# 找到 <name> 标签的内容,相当于抓取 HTML 的 <h1> 标题name = jdk.find('name').get('value') if jdk.find('name') is not None else "无名英雄"# 找到 <homePath> 标签的内容,相当于抓取 HTML 的 <a href>home_path = jdk.find('homePath').get('value') if jdk.find('homePath') is not None else "无家可归"# 打印出来,就像把爬到的数据展示在控制台print(f"JDK:{name}")# print(f"路径:{home_path}")# print("--- 分隔线 ---")# print()# 输出结果:
"""
JDK:Python 3.8 (Roll)
JDK:Python 3.8
JDK:Python 3.8 (m4)
JDK:Python 3.8 (Alex)
JDK:Python 3.8 (TF)
JDK:Python 3.8 (Yolo)
JDK:Python 3.8 (Dirty)
JDK:Python 3.8 (del_me)
JDK:Python 3.8 (QT)
JDK:Python 3.8 (PyTorch)
JDK:Python 3.8 (PyCharmLearningProject)
JDK:Python 3.8 (del_me) (2)
JDK:Python 3.8 (Torch)
JDK:Python 3.8 (pythonProject)
JDK:Python 3.8 (CV2)
JDK:Python 3.8 (Traffic)
JDK:Python 3.8 (dedeeee)
JDK:Python 3.8 (TensorFlow-GPU)
JDK:Python 3.8 (SpeechToText)
JDK:Python 3.8 (Start)
JDK:Python 3.8 (del_this)
JDK:Python 3.8 (OpenCV)
JDK:Python 3.8 (My_Spider)
JDK:Python 3.8 (del_this) (2)
JDK:Python 3.8 (del_here)
JDK:Python 2.7 (py27)
JDK:Python 3.8 (del_aaaa)
JDK:Python 3.8 (del)
JDK:Python 3.8 (Porxy_Server)
JDK:Python 3.8 (A)
JDK:Python 3.8 (web)
JDK:Python 3.8 (dek)
JDK:Python 3.6 (Torch_Old_Photo_To_New)
JDK:Python 3.6 (py36)
JDK:Python 3.6 (face)
JDK:Python 3.8 (Pad)
JDK:Python 3.8 (del_later)
JDK:Python 3.8 (del) (2)
JDK:Python 3.8 (delthis)
JDK:Python 3.9 (del_gis)
JDK:Python 3.8 (GSW)
JDK:Python 3.8 (deddd)
JDK:Python 3.8 (dd2)
JDK:Python 3.8 (WNT)
JDK:Python 3.8 (tf_25)
JDK:Python 3.11 (iMac)
JDK:Python 3.8 (Dogg)
JDK:Python 3.11 (pythonProject_del)
JDK:Python 3.8 (Algo)
JDK:altair
JDK:Python 3.8 (torch_tiny)
JDK:Python 3.10 (torch_new)
JDK:Python 3.10 (tf_faceswap)
JDK:Python 3.10 (fa)
JDK:Python 3.10 (Spiders)
JDK:Python 3.10 (OpenCV)
JDK:Python 3.8 (opencv_apps)
JDK:Python 3.10 (nvidia_labs)
JDK:Python 3.10 (del_me)
JDK:Python 3.10 (del_w1)
JDK:Python 3.10 (FakeFace)
JDK:Python 3.10 (My_Spider)
JDK:Python 3.11 (pythonProject)
JDK:Python 3.11 (pythonProject) (2)
JDK:Python 3.11 (del)
JDK:Python 3.7 (del2)
JDK:Python 3.7 (del_33)
JDK:Python 3.10 (littleSpider)
JDK:Python 3.10 (Yolo8)
JDK:Python 3.10 (torch_mxnet)
JDK:Python 3.10 (pyrr)
JDK:Python 3.10 (tf_15)
JDK:Python 3.8 (Utils)
JDK:Python 3.8 (Utils) (2)
JDK:Python 3.10 (Utils)
JDK:Python 3.10 (showMeWhy)
JDK:Python 3.10 (torch_310)
JDK:Python 3.10 (fb_faiss)
JDK:Python 3.10 (SDPA)
JDK:Python 3.10 (transformers_tf)
JDK:Python 3.10 (Explore_Github)
JDK:Python 3.8 (tf_deepface)
JDK:Python 3.8 (venv)
JDK:Python 3.8 (p45)
JDK:Python 3.8 (tf_deepface) (2)
JDK:Python 3.8 (Test_lab)
JDK:Python 3.10 (torch_220)
JDK:Python 3.10 (del)
JDK:Python 3.10 (delddd)
JDK:Python 3.10 (del_me_later)
JDK:Python 3.10 (stable-diffusion-web-app)
JDK:Python 3.10 (torch_210)
JDK:Python 3.10 (torch_201)
JDK:Python 3.10 (torch_112_Transformer)
JDK:Python 3.10 (st)
JDK:Python 3.10 (maybe_del)
JDK:Python 3.10 (djangoShop)
JDK:Python 3.10 (tf_swap_face)
JDK:Python 3.10 (github_io)
JDK:Python 3.10 (ScreenToCode)
JDK:Python 3.10 (QT6)
JDK:Python 3.7 (MoviesRecommend)
JDK:Python 3.8 (redash)
JDK:Python 3.7 (py37)
JDK:Python 3.9 (py39)
JDK:Python 3.7 (python_nlp)
JDK:Python 3.11 (Nuitka_MakeExe)
JDK:Python 3.10 (deldd)
JDK:Python 3.10 (Nuitka_MakeExe2)
JDK:Python 3.7 (tf_115)
JDK:Python 3.10 (torch_212)
JDK:Python 3.7 (tf_1.15)
JDK:Python 3.10 (python_flask_file_server)
JDK:spider
JDK:Python 3.10 (crawler)
JDK:spider (2)
JDK:Python 3.8 (a1)
JDK:Python 3.10 (just_spiders)
JDK:Python 3.10 (streamlit_clould)
JDK:Python 3.10 (QT)
JDK:Python 3.11 (Django_Blog)
JDK:Python 3.8 (d1)
JDK:Python 3.10 (p1)
JDK:Python 3.11 (p2)
JDK:Python 3.11 (honeybot)
JDK:Python 3.11 (d11)
JDK:Python 3.9 (del_later)
JDK:Python 3.11 (shop_app)
JDK:Python 3.9 (PyCharmLearningProject)
JDK:Python 3.10 (torch15)
JDK:Python 3.8 (torch_115)
JDK:voice
JDK:torch_201
JDK:torch_220
JDK:Python 3.10 (torch_113)
JDK:Python 3.10 (torch_1_9)
JDK:Python 3.7 (torch_191)
JDK:Python 3.8 (torch_192)
JDK:Python 3.9 (p39)
JDK:Python 3.11 (python_nlp)
JDK:Python 3.11 (音乐web开发)
JDK:Python 3.11 (music_app)
JDK:Python 3.11 (music_app) (2)
JDK:Python 3.11 (django_rest_api)
JDK:Python 3.11 (dj_basic)
JDK:Python 3.10 (del1111)
JDK:Python 3.10 (r_notebooks)
JDK:Python 3.10 (RR)
JDK:Python 3.10 (dddeledd_me)
JDK:Python 3.10 (RRR)
JDK:Python 3.11 (R3)
JDK:Python 3.11 (Silvia)
JDK:Python 3.11 (Group3Django)
JDK:Python 3.11 (RL)
JDK:Python 3.11 (MakeExe)
JDK:Python 3.8 (venv) (2)
JDK:Python 3.8 (RL_gym_py38)
JDK:Python 3.11 (Mobile_farm_robot_simulation-master)
JDK:Python 3.10 (det2)
JDK:Python 3.11 (smallApps)
JDK:Python 3.11 (face)
JDK:Python 3.9 (face_app)
JDK:Python 3.7 (trafficsign)
JDK:Python 3.10 (seg)
JDK:Python 3.10 (sd)
JDK:Python 3.10 (junk)
"""

运行后,输出了所有解释器名称,比如 Python 3.8 (del_me),但我需要自动删除路径不存在的条目。

代码2:删除不存在的项目。

我加了 os.path.exists 检查路径,并尝试删除无效 <jdk>

import xml.etree.ElementTree as ET
import os# 按照你提供的路径
xml_file = r"jdk.table.xml"# 像打开网页一样,解析 XML 文件
tree = ET.parse(xml_file)
root = tree.getroot()  # 得到 XML 的“根节点”# 存储要删除的 <jdk> 元素和它们的父节点
jdk_to_remove = []# 遍历所有的 <jdk> 标签
for jdk in root.findall('.//jdk'):# 找到 <name> 和 <homePath> 标签的内容name = jdk.find('name').get('value') if jdk.find('name') is not None else "无名英雄"home_path = jdk.find('homePath').get('value') if jdk.find('homePath') is not None else "无家可归"# 打印出来,方便查看print(f"检查 JDK:{name}, 路径:{home_path}")# 检查路径是否存在if not os.path.exists(home_path):print(f"⚠️ 路径 {home_path} 不存在,标记为删除!")# 找到 jdk 的父节点parent = rootfor ancestor in root.iter():for child in ancestor:if child == jdk:parent = ancestorbreakjdk_to_remove.append((jdk, parent))else:print("✅ 路径存在,保留!")print()# 删除标记的 <jdk> 元素
for jdk, parent in jdk_to_remove:parent.remove(jdk)print(f"已删除无效 JDK:{jdk.find('name').get('value') if jdk.find('name') is not None else '无名英雄'}")# 保存修改后的 XML 文件
tree.write(xml_file, encoding="utf-8", xml_declaration=True)
print(f"🎉 清理完成!已保存到 {xml_file}")
print()
最终结果

PyCharm 的解释器列表清爽了,再也没有 [invalid] 路径!


希望对大家有帮助。


http://www.hkcw.cn/article/VMvauFEeks.shtml

相关文章

c++面向对象第4天---拷贝构造函数与深复制

含有对象成员的构造函数深复制与浅复制拷贝&#xff08;复制&#xff09;构造函数 第一部分&#xff1a;含有对象成员的构造函数 以下是一个学生 类包含日期成员出生日期的代码 #include<iostream> using namespace std; class Date { public:Date(int year,int month…

【STM32F1标准库】理论——定时器/计数器中断

目录 一、定时器/计数器简介 1.通用定时器 2.基本定时器 二、时基单元 三、定时器/计数器结构框图 四、程序运行途中改变分频系数后的时序 1.缓冲器 2.预装器 3.RCC时钟树 五、计时计算方法 一、定时器/计数器简介 定时器可以对输入的时钟进行计数&#xff0c;并在计…

樊振东新球队夺欧冠冠军 萨尔布吕肯再创辉煌

北京时间6月1日晚,欧洲乒联冠军联赛男团决赛中,樊振东新赛季将加盟的萨尔布吕肯以3-1战胜杜塞尔多夫,第三次夺得欧冠冠军。比赛具体比分为:弗朗西斯卡2-3卡尔伯格、莫雷加德3-0邱党、达科约奇克3-2波尔、弗朗西斯卡3-2邱党。此前,德甲联赛萨尔布吕肯乒乓球甲级俱乐部宣布樊…

发明江苏足球联赛的人 一定是个天才 城市荣誉之战

江苏城市足球联赛的创立者堪称天才。江苏是一个由十三个地级市组成的省份,每个城市都有自己的特色和骄傲,彼此之间竞争激烈。此前,江苏省文旅部门制作了一个景点介绍视频,但网友们却开始计算各城市的出现时长,甚至有评论说“宿迁凭什么比扬州多三秒”。然而,在这样一个充…

韩国大选投票将开启 4位前总统发声 政坛局势扑朔迷离

韩国再次迎来大选季,选情充满变数。前总统朴槿惠突然发声,而现任总统尹锡悦则选择沉默。提前投票已经开始,民众排队等待投下自己的一票。最新民调显示,共同民主党的支持率逼近40%,而国民力量党则降至32%。执政党面临困境,主要是因为未能有效解决民生问题,年轻选民对此不…

高档烟酒“人情往来”暗藏权钱交易 违纪破法的开端

端午节临近,各级纪检监察机关针对这一节点部署了一系列纠治“四风”的明察暗访工作,重点查处违规吃喝、违规收送礼品礼金等问题,并对顶风违纪行为进行快速处理。近期,各地通报曝光了一批典型问题,相关人员均受到了严肃处理。从近年来各级纪检监察机关查处的腐败案件来看,…

C++输入与输出技术详解

文章目录 引言一、C标准输入输出流1.1 cin与cout1.2 cerr与clog 二、C风格输入输出函数2.1 scanf与printf2.2 fgets与puts 三、输入输出优化四、总结 引言 在C编程中&#xff0c;输入与输出&#xff08;I/O&#xff09;操作是程序与用户、文件或其他系统组件交互的核心环节。C…

文件管理器+APP:高效管理,便捷浏览

在智能手机的日常使用中&#xff0c;文件管理是一项不可或缺的功能。无论是存储照片、视频、文档&#xff0c;还是管理各种应用程序的数据&#xff0c;一个高效、便捷的文件管理器都能显著提升用户的使用体验。文件管理器APP正是这样一款拥有直观界面和易于使用的文件管理器应用…

http协议与https协议

目录 一、认识URL 二、urlencode和urldecode 三、HTTP协议格式 1.HTTP请求 2.HTTP响应 3.简单获取一个http响应 4.简单使用抓包工具 fiddler 四、简单的http代码 1.小知识点 &#xff08;1&#xff09;recv &#xff08;2&#xff09;首页 2.Http代码书写vision…

深入理解 C++11 中的 std::move —— 移动语义详解(小白友好版)

引言 随着 C11 的引入&#xff0c;语言迎来了一个重要特性——移动语义&#xff0c;极大地提升了程序性能&#xff0c;尤其是涉及资源管理的类&#xff08;如 string、vector 等容器&#xff09;的效率。作为移动语义的核心工具&#xff0c;move 扮演着关键角色。本文将从基础…

振动力学的三类基本问题

振动问题的分类依赖于分类的出发点&#xff0c;本文从系统论的角度来分析振动问题的分类。如图1&#xff0c;一个振动系统&#xff0c;包括三个方面&#xff1a;输入、系统特性&#xff08;或称为系统模型&#xff09;、输出。其中&#xff0c;输入指外界载荷&#xff0c;包括力…

西瓜书第十一章——降维与度量学习

文章目录 降维与度量学习k近邻学习原理头歌实战-numpy实现KNNsklearn实现KNN 降维——多维缩放&#xff08;Multidimensional Scaling, MDS&#xff0c;MDS&#xff09;提出背景与原理重述1.**提出背景**2.**数学建模与原理推导**3.**关键推导步骤** Principal Component Analy…

20250531MATLAB三维绘图

MATLAB三维绘图 三维曲线&#xff1a;plot3功能介绍代码实现过程plot3实现效果 三维曲面空间曲面作图命令&#xff1a;meshmeshgrid语法示例应用meshgrid实操训练 peakspeaks 的基本用法peaks数学表达式实操训练自定义网格大小使用自定义网格 meshMATLAB代码对齐快捷键Ctrli墨西…

郑钦文称打5盘都没问题可惜没有 能量满满晋级八强

6月1日,法网女单16强决战中,中国选手郑钦文经过2小时47分钟的激战,以2-1战胜俄罗斯名将萨姆索诺娃,赢得罗兰-加洛斯的10连胜,首次闯入法网八强。接下来她将对阵萨巴伦卡。首盘比赛中,郑钦文两次被破发后都顽强回破,最终在抢七局中以7-5拿下第一盘。第二盘,郑钦文错失了…

张振朗称《刑侦12》让我过足戏瘾 挑战“人格解离症”角色

由钟澍佳总监制,巢志豪监制,林保怡、陈法蓉、张振朗等领衔主演的TVB刑侦悬疑剧《刑侦12》正在腾讯视频和TVB翡翠台热播。这是张振朗近一年来第三次饰演警员角色。与此前的《反黑英雄》《夺命提示》不同的是,他在《刑侦12》中饰演的刑凯有点“怪”——因为儿时的原生家庭创伤…

魏建军回应邀71岁车手参加拉力赛 精神榜样引热议

在新疆塔克拉玛干N39沙漠落幕的环塔拉力赛现场,长城汽车董事长魏建军回应了邀请71岁车手梁钰祥参赛的原因。此次比赛,长城汽车派出强大阵容,时隔十年再次以多品牌联合形式参赛。梁钰祥驾驶坦克500 Hi4-Z参与T2量产组比赛,在恶劣的沙漠环境和复杂的地形中稳扎稳打,展现了高…

花两千买苹果15被说一眼假 山寨机陷阱需警惕

金华兰溪的杨先生最近经历了一件让人无奈的事。他在直播间花2000元买了一部512G的苹果15 Pro Max,以为捡了大便宜,但到手后发现手机问题不断。从外观、桌面到应用图标,乍一看确实像苹果手机,但点开APP Store时出现的“手机助手”字样立刻暴露了真相,原来这是一部披着苹果外…

柳岩因卡鱼刺进了医院 分享就医经历提醒众人

6月1日,湘籍女星柳岩分享了自己去医院取鱼刺的经历,并提醒大家喉咙卡鱼刺时应尽快就医。她写道:“卡鱼刺是常发生的事,去医院取鱼刺是第一次,无论如何,不要跟鱼刺搏斗,越早去医院,越早解脱,医院技术很好,完全不遭罪。”柳岩出生于湖南省衡阳市,毕业于湖南师范大学,…

一场来自云端的生死自救 当事人讲述更多逃生细节

5月24日,在甘肃省西部的祁连山区域,55岁的滑翔伞爱好者彭玉江在进行地面日常训练时,意外遭遇异常天气状况,被强对流云团卷入后以极快的速度上升至海拔8000多米的高空,这一高度远超普通滑翔伞飞行的安全极限。但他仍坚持住有意识控伞,冲出云层,最后安全着陆。事后,甘肃省…

樊振东留洋是主动走出舒适区 开启乒乓新篇章

2025年6月1日,德国乒乓球甲级联赛(TTBL)的FC萨尔布吕肯俱乐部宣布奥运冠军樊振东正式加盟,将以“欧洲冒险者”的身份征战新赛季。这一消息在国际乒坛引起轰动。与以往中国球员短期留洋不同,樊振东的主动选择不仅体现了个人职业规划的突破,也标志着中国乒乓球运动员国际化…