清理 pycharm 無效解釋器

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.pswp.cn/diannao/85625.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/85625.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/85625.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【ConvLSTM第二期】模擬視頻幀的時序建模(Python代碼實現)

目錄 1 準備工作&#xff1a;python庫包安裝1.1 安裝必要庫 案例說明&#xff1a;模擬視頻幀的時序建模ConvLSTM概述損失函數說明&#xff08;python全代碼&#xff09; 參考 ConvLSTM的原理說明可參見另一博客-【ConvLSTM第一期】ConvLSTM原理。 1 準備工作&#xff1a;pytho…

MySQL DDL操作全解析:從入門到精通,包含索引視圖分區表等全操作解析

目錄 一、DDL 基礎概述 1.1 DDL 定義與作用 1.2 DDL 語句分類 1.3 數據類型與存儲引擎 1.3.1 數據類型 1.3.2 存儲引擎差異 二、基礎 DDL 語句詳解 2.1 創建數據庫與表 2.1.1 創建數據庫 2.1.2 創建表 2.2 修改表結構 2.2.1 添加列 2.2.2 修改列屬性 2.2.3 刪除列…

設計模式——抽象工廠設計模式(創建型)

摘要 抽象工廠設計模式是一種創建型設計模式&#xff0c;旨在提供一個接口&#xff0c;用于創建一系列相關或依賴的對象&#xff0c;無需指定具體類。它通過抽象工廠、具體工廠、抽象產品和具體產品等組件構建&#xff0c;相比工廠方法模式&#xff0c;能創建一個產品族。該模…

Express教程【006】:使用Express寫接口

文章目錄 8、使用Express寫接口8.1 創建API路由模塊8.2 編寫GET接口8.3 編寫POST接口 8、使用Express寫接口 8.1 創建API路由模塊 1??新建routes/apiRouter.js路由模塊&#xff1a; /*** 路由模塊*/ // 1-導入express const express require(express); // 2-創建路由對象…

【iOS(swift)筆記-14】App版本不升級時本地數據庫sqlite更新邏輯二

App版本不升級時&#xff0c;又想即時更新本地數據庫怎么辦&#xff1f; 辦法二&#xff1a;從服務器下載最新的sqlite數據替換掉本地的數據&#xff08;注意是數據不是文件&#xff09; 稍加調整&#xff0c; // &#xff01;&#xff01;&#xff01;注意&#xff01;&…

Mac電腦_鑰匙串操作選項變灰的情況下如何刪除?

Mac電腦_鑰匙串操作選項變灰的情況下如何刪除&#xff1f; 這時候 可以使用相關的終端命令進行操作。 下面附加文章《Mac電腦_鑰匙串操作的終端命令》。 《Mac電腦_鑰匙串操作的終端命令》 &#xff08;來源&#xff1a;百度~百度AI 發布時間&#xff1a;2025-06&#xff09;…

對接系統外部服務組件技術方案

概述 當前系統需與多個外部系統對接,然而外部系統穩定性存在不確定性。對接過程中若出現異常,需依靠雙方的日志信息來定位問題,但若日志信息不夠完整,會極大降低問題定位效率。此外,問題發生后,很大程度上依賴第三方的重試機制,若第三方缺乏完善的重試機制,就需要手動…

WAF繞過,網絡層面后門分析,Windows/linux/數據庫提權實驗

一、WAF繞過文件上傳漏洞 win7&#xff1a;10.0.0.168 思路&#xff1a;要想要繞過WAF&#xff0c;第一步是要根據上傳的內容找出來被攔截的原因。對于文件上傳有三個可以考慮的點&#xff1a;文件后綴名&#xff0c;文件內容&#xff0c;文件類型。 第二步是根據找出來的攔截原…

一文學會c++中的內存管理知識點

文章目錄 c/c內存管理c語言動態內存管理c動態內存管理new/delete自定義類型妙用operator new和operator delete malloc/new&#xff0c;free/delete區別 c/c內存管理 int globalVar 1;static int staticGlobalVar 1;void Test(){static int staticVar 1;int localVar 1;in…

深入解析Linux死鎖:原理、原因及解決方案

Linux死鎖是系統資源管理的致命陷阱&#xff0c;平均每年導致全球數據中心約??3.7億小時??的服務中斷。本文深度剖析死鎖形成的??四個必要條件??和六種典型死鎖場景&#xff0c;結合Linux內核源碼層級的資源管理機制&#xff0c;揭示文件系統鎖、內存分配、多線程同步等…

SKUA-GOCAD入門教程-第八節 線的創建與編輯2

8.1.3根據線創建曲線 (1)從線生成線 這個命令可以將一組曲線合并為一條曲線。每個輸入曲線都會成為新曲線內的一個部分。 1、選擇 Curve commands > New > Curves 打開對話框。 圖1 根據曲線創建曲線 在“name”框中

『uniapp』把接口的內容下載為txt本地保存 / 讀取本地保存的txt文件內容(詳細圖文注釋)

目錄 預覽效果思路分析downloadTxt 方法readTxt 方法 完整代碼總結 歡迎關注 『uniapp』 專欄&#xff0c;持續更新中 歡迎關注 『uniapp』 專欄&#xff0c;持續更新中 預覽效果 思路分析 downloadTxt 方法 該方法主要完成兩個任務&#xff1a; 下載 txt 文件&#xff1a;通…

攻防世界-unseping

進入環境 在獲得的場景中發現PHP代碼并進行分析 編寫PHP編碼 得到 Tzo0OiJlYXNlIjoyOntzOjEyOiIAZWFzZQBtZXRob2QiO3M6NDoicGluZyI7czoxMDoiAGVhc2UAYXJncyI7YToxOntpOjA7czozOiJwd2QiO319 將其傳入 想執行ls&#xff0c;但是發現被過濾掉了 使用環境變量進行繞過 $a new…

IP查詢與網絡風險的關系

網絡風險場景與IP查詢的關聯 網絡攻擊、惡意行為、數據泄露等風險事件頻發&#xff0c;而IP地址作為網絡設備的唯一標識&#xff0c;承載著關鍵線索。例如&#xff0c;在DDoS惡意行為中&#xff0c;攻擊者利用大量IP地址發起流量洪泛&#xff1b;惡意行為通過變換IP地址繞過封…

pikachu通關教程-XSS

XSS XSS漏洞原理 XSS被稱為跨站腳本攻擊&#xff08;Cross Site Scripting&#xff09;&#xff0c;由于和層疊樣式表&#xff08;Cascading Style Sheets&#xff0c;CSS&#xff09;重名&#xff0c;改為XSS。主要基于JavaScript語言進行惡意攻擊&#xff0c;因為js非常靈活…

【時時三省】(C語言基礎)數組作為函數參數

山不在高&#xff0c;有仙則名。水不在深&#xff0c;有龍則靈。 ----CSDN 時時三省 調用有參函數時&#xff0c;需要提供實參。例如sin ( x )&#xff0c;sqrt ( 2&#xff0c;0 )&#xff0c;max ( a&#xff0c;b )等。實參可以是常量、變量或表達式。數組元素的作用與變量…

硬件工程師筆記——555定時器應用Multisim電路仿真實驗匯總

目錄 一 555定時器基礎知識 二、引腳功能 三、工作模式 1. 單穩態模式&#xff1a; 2. 雙穩態模式&#xff08;需要外部電路輔助&#xff09;&#xff1a; 3. 無穩態模式&#xff08;多諧振蕩器&#xff09;&#xff1a; 4. 可控脈沖寬度調制&#xff08;PWM&#xff09…

C++11特性:enum class(強枚舉類型)詳解

C11引入的 enum class&#xff08;強枚舉類型&#xff09;解決了傳統枚舉的多個問題&#xff1a; 防止枚舉值泄漏到外部作用域&#xff1b;禁止不同枚舉間的隱式轉換&#xff1b;允許指定底層數據類型優化內存&#xff1b;避免命名空間污染。 其基本語法為 enum class Name{.…

【QT】QString 與QString區別

在C中&#xff0c;QString 和 QString& 有本質區別&#xff0c;尤其是在參數傳遞和內存管理方面&#xff1a; 1. QString&#xff08;按值傳遞&#xff09; 創建副本&#xff1a;傳遞時會創建完整的字符串副本內存開銷&#xff1a;可能涉及深拷貝&#xff08;特別是大字符…

提升四級閱讀速度方法

以下是針對四級英語閱讀速度提升的系統性解決方案&#xff0c;結合最新考試規律和高效訓練方法&#xff0c;分五個核心模塊整理&#xff1a; &#x1f680; ??一、基礎提速訓練&#xff08;消除生理障礙&#xff09;?? ??擴大視幅范圍?? 從逐詞閱讀升級為 ??意群閱讀…