清理 pycharm 无效解释器

news2025/6/5 21:01:02

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 = root
        for ancestor in root.iter():
            for child in ancestor:
                if child == jdk:
                    parent = ancestor
                    break
        jdk_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.coloradmin.cn/o/2397805.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

手机如何压缩文件为 RAR 格式:详细教程与工具推荐

在如今这个数字化时代&#xff0c;手机已经成为我们生活中不可或缺的工具。随着我们使用手机的频率越来越高&#xff0c;手机中的文件也越来越多&#xff0c;照片、视频、文档等各种类型的文件不断占据着手机的存储空间。 据统计&#xff0c;普通用户的手机存储空间中&#xf…

Java 注解式限流教程(使用 Redis + AOP)

Java 注解式限流教程&#xff08;使用 Redis AOP&#xff09; 在上一节中&#xff0c;我们已经实现了基于 Redis 的请求频率控制。现在我们将进一步升级功能&#xff0c;使用 Spring AOP 自定义注解 实现一个更优雅、可复用的限流方式 —— 即通过 RateLimiter 注解&#xf…

C# XAML 基础:构建现代 Windows 应用程序的 UI 语言

在现代 Windows 应用程序开发中&#xff0c;XAML (eXtensible Application Markup Language) 扮演着至关重要的角色。作为一种基于 XML 的声明性语言&#xff0c;XAML 为 WPF (Windows Presentation Foundation)、UWP (Universal Windows Platform) 和 Xamarin.Forms 应用程序提…

【Linux】进程地址空间揭秘(初步认识)

10.进程地址空间&#xff08;初步认识&#xff09; 文章目录 10.进程地址空间&#xff08;初步认识&#xff09;一、进程地址空间的实验现象解析二、进程地址空间三、虚拟内存管理补充&#xff1a;数据的写时拷贝&#xff08;浅谈&#xff09;补充&#xff1a;页表&#xff08;…

设计模式——备忘录设计模式(行为型)

摘要 备忘录设计模式是一种行为型设计模式&#xff0c;用于在不破坏封装性的前提下&#xff0c;捕获对象的内部状态并在需要时恢复。它包含三个关键角色&#xff1a;原发器&#xff08;Originator&#xff09;、备忘录&#xff08;Memento&#xff09;和负责人&#xff08;Car…

UI自动化测试的革新,新一代AI工具MidScene.js实测!

前言 AI已经越来越深入地走入我们的实际工作,在软件测试领域,和AI相关的新测试工具、方法也层出不穷。在之前我们介绍过结合 mcp server 实现 AI 驱动测试的案例,本文我们将介绍一个近期崭露头角的国产AI测试工具 Midscene.js Midscene.js简介 MidScene.js 是由字节跳动 w…

4. Qt对话框(2)

在上节中已经学习了对话框的确认和取消&#xff0c;本节内容继续接上节完成登录对话框实例并得到登录信息。 本文部分ppt、视频截图原链接&#xff1a;[萌马工作室的个人空间-萌马工作室个人主页-哔哩哔哩视频] 1 实现登录对话框 1.1 功能需要 得到登录信息&#xff0c;需要…

Android Studio 2022.2.1.20 汉化教程

查看Android Studio 版本 Android Studio Flamingo | 2022.2.1 Patch 2 下载&#xff1a;https://plugins.jetbrains.com/plugin/13710-chinese-simplified-language-pack----/versions/stable

golang -- slice 底层逻辑

目录 一、前言二、结构三、创建3.1 根据 make创建3.2 通过数组创建 四、内置append追加元素4.1 追加元素4.2 是否扩容4.2.1 不扩容4.2.2 扩容 总结 一、前言 前段时间学了go语言基础&#xff0c;过了一遍之后还是差很多&#xff0c;所以又结合几篇不同资料重新学习了一下相关…

SOC-ESP32S3部分:26-物联网MQTT连云

飞书文档https://x509p6c8to.feishu.cn/wiki/IGCawAgqFibop7kO83KcsDFBnNb ESP-MQTT 是 MQTT 协议客户端的实现&#xff0c;MQTT 是一种基于发布/订阅模式的轻量级消息传输协议。ESP-MQTT 当前支持 MQTT v5.0。 特性 支持基于 TCP 的 MQTT、基于 Mbed TLS 的 SSL、基于 WebSo…

制造业的未来图景:超自动化与劳动力转型的双重革命

市场现状&#xff1a;传统制造业的转型阵痛 当前全球制造业正站在历史性变革的十字路口。埃森哲对552位工厂经理的全球调研显示&#xff0c;60%的受访者将劳动力转型视为首要战略任务​​&#xff0c;而63%的工厂正在加速部署自动化技术[1]。超过​75%的工厂经理​​认为&…

【Unity】相机 Cameras

1 前言 主要介绍官方文档中相机模块的内容。 关于“9动态分辨率”&#xff0c;这部分很多API文档只是提了一下&#xff0c;具体细节还需要自己深入API才行。 2 摄像机介绍 Unity 场景在三维空间中表示游戏对象。由于观察者的屏幕是二维屏幕&#xff0c;Unity 需要捕捉视图并将…

如何在 Solana 上发币,并创建初始流动性让项目真正“动”起来?

在 Solana 上发行代币如今已不再是技术门槛&#xff0c;而是市场策略和执行效率的较量。如果你只是简单发了一个代币&#xff0c;却没为它建立流动性和市场机制&#xff0c;那么它就只是一个“死币”。 本文将带你一步步理解&#xff0c;如何从发币到建立流动性池&#xff0c;…

核心机制:滑动窗口

TCP 协议 1.确认应答 可靠传输的核心机制 2.超时重传 可靠传输的核心机制 3.连接管理 TCP/网络 最高的面试题 三次握手,建立连接(必须是 三次) 四次挥手,断开连接(可能是 三次) 核心机制四:滑动窗口 算法中的"滑动窗口" 出自 TCP 前面的三个…

苹果电脑深度清理,让老旧Mac重焕新生

在日常使用苹果电脑的过程中&#xff0c;随着时间推移&#xff0c;系统内会积累大量冗余数据&#xff0c;导致电脑运行速度变慢、磁盘空间紧张。想要让设备恢复流畅&#xff0c;苹果电脑深度清理必不可少。那么&#xff0c;如何进行苹果电脑深度清理呢&#xff1f;接下来为你详…

微服务面试(分布式事务、注册中心、远程调用、服务保护)

1.分布式事务 分布式事务&#xff0c;就是指不是在单个服务或单个数据库架构下&#xff0c;产生的事务&#xff0c;例如&#xff1a; 跨数据源的分布式事务跨服务的分布式事务综合情况 我们之前解决分布式事务问题是直接使用Seata框架的AT模式&#xff0c;但是解决分布式事务…

高性能MYSQL(三):性能剖析

一、性能剖析概述 &#xff08;一&#xff09;关于性能优化 1.什么是性能&#xff1f; 我们将性能定义为完成某件任务所需要的时间度量&#xff0c;换句话说&#xff0c;性能即响应时间&#xff0c;这是一个非常重要的原则。 我们通过任务和时间而不是资源来测量性能。数据…

mysql(十四)

目录 多表查询 1.准备工作 2--创建表格 3--插入数据 2.笛卡尔积查询 3.内连接查询 1--隐式内连接 格式 查询 2--显示内连接&#xff08;Inner join .. on &#xff09; 格式 查询 4.外连接查询 1--左外连接查询&#xff08;LEFT OUTER JOIN .. ON &#xff09; 格式 查询 2-- 右…

工业物联网中的事件驱动采样架构及优化

论文标题 Event-Based Sampling Architecture and Optimization for Industrial Internet of Things 工业物联网中的事件驱动采样架构及优化 作者信息 Tejas Thosani Process Control Systems, Micron Technology Inc., Manassas, USA tthosanimicron.com Andres Prado Esp…

基于 HT for Web 的轻量化 3D 数字孪生数据中心解决方案

一、技术架构&#xff1a;HT for Web 的核心能力 图扑软件自主研发的 HT for Web 是基于 HTML5 的 2D/3D 可视化引擎&#xff0c;核心技术特性包括&#xff1a; 跨平台渲染&#xff1a;采用 WebGL 技术&#xff0c;支持 PC、移动端浏览器直接访问&#xff0c;兼容主流操作系统…