利用python和gpt寫一個conda環境可視化管理工具

最近在學習python,由于不同的版本之間的差距較大,如果是用環境變量來配置python的話,會需要來回改,于是請教得知可以用conda來管理,但是conda在管理的時候老是要輸入命令,感覺也很煩,于是讓gpt幫寫了一個很簡陋的conda環境管理界面(純屬個人學習,不喜勿噴),下面是最終的效果:

1、左側的激活按鈕沒什么用

2、中間的輸入框是要安裝的包名,輸入完成之后,點擊安裝即可把包安裝到對應的環境,比如我在ai312對應的輸入框中輸入numpy,那么就是在a312這個env下面安裝numpy的包,其實背后執行的命令就是:conda install numpy -n ai312 -y

3、下面的兩個輸入框,第一個是環境名稱,比如ai312,第二個是python的版本,比如3.8

直接上代碼:

import os
import subprocess
import json
import re
import tkinter as tk
from tkinter import messagebox, simpledialog
from tkinter import scrolledtext
import threadingclass CondaEnvManager:def __init__(self, root):self.root = rootself.root.title("Conda 環境管理器")self.root.geometry("600x400")# 獲取 Conda 路徑self.conda_path = self.get_conda_path()self.env_list_frame = tk.Frame(self.root)self.env_list_frame.pack(pady=10, fill=tk.BOTH, expand=True)self.create_env_frame = tk.Frame(self.root)self.create_env_frame.pack(pady=10)self.create_env_label = tk.Label(self.create_env_frame, text="創建新環境:")self.create_env_label.grid(row=0, column=0, padx=5)self.new_env_name = tk.Entry(self.create_env_frame)self.new_env_name.grid(row=0, column=1, padx=5)# 新增 Python 版本輸入框self.python_version_label = tk.Label(self.create_env_frame, text="Python 版本:")self.python_version_label.grid(row=1, column=0, padx=5)self.python_version_entry = tk.Entry(self.create_env_frame)self.python_version_entry.grid(row=1, column=1, padx=5)self.create_env_button = tk.Button(self.create_env_frame, text="創建", command=self.create_env)self.create_env_button.grid(row=0, column=2, padx=5)self.refresh_envs()# 日志輸出框self.log_output = scrolledtext.ScrolledText(self.root, width=70, height=15)self.log_output.pack(pady=10, fill=tk.BOTH, expand=True)def get_conda_path(self):# 提示用戶輸入 Conda 路徑while True:conda_path = simpledialog.askstring("Conda 路徑", "請輸入 conda.exe 的完整路徑:")if not conda_path:messagebox.showerror("錯誤", "Conda 路徑不能為空,請重試。")continue# 檢查路徑是否有效if os.path.isfile(conda_path) and "conda" in conda_path:return conda_pathelse:messagebox.showerror("錯誤", f"路徑 '{conda_path}' 無效,請重試。")def refresh_envs(self):for widget in self.env_list_frame.winfo_children():widget.destroy()try:# 使用用戶輸入的 Conda 路徑result = subprocess.run([self.conda_path, 'env', 'list', '--json'], capture_output=True, text=True)output = result.stdout# 提取 JSON 數據try:json_match = re.search(r'\{.*\}', output, re.DOTALL)if not json_match:raise ValueError("No valid JSON data found in the output.")json_data = json_match.group(0)data = json.loads(json_data)except json.JSONDecodeError as e:messagebox.showerror("錯誤", f"解析 JSON 數據失敗: {e}")returnexcept ValueError as e:messagebox.showerror("錯誤", f"提取 JSON 數據失敗: {e}")returnenvs = data.get('envs', [])if not envs:messagebox.showinfo("信息", "未找到任何環境。")returnfor env in envs:env_name = os.path.basename(env)env_frame = tk.Frame(self.env_list_frame)env_frame.pack(pady=5, fill=tk.X)# 激活按鈕放到左邊activate_button = tk.Button(env_frame, text="激活", command=lambda e=env_name: self.activate_env(e))activate_button.pack(side=tk.LEFT, padx=5)# 環境名稱標簽env_label = tk.Label(env_frame, text=env_name, anchor="w", width=20)env_label.pack(side=tk.LEFT, padx=5)# 輸入框居中并拉長package_entry = tk.Entry(env_frame, width=30)package_entry.pack(side=tk.LEFT, padx=5, expand=True, fill=tk.X)# 安裝按鈕放到右邊install_button = tk.Button(env_frame, text="安裝", command=lambda e=env_name, p=package_entry: self.start_installation(e, p.get()))install_button.pack(side=tk.RIGHT, padx=5)except Exception as e:messagebox.showerror("錯誤", f"獲取環境失敗: {e}")def start_installation(self, env_name, package_name):if not package_name:messagebox.showwarning("警告", "請輸入包名。")returnself.log_output.delete(1.0, tk.END)threading.Thread(target=self.install_package, args=(env_name, package_name)).start()def install_package(self, env_name, package_name):try:process = subprocess.Popen([self.conda_path, 'install', package_name, '-n', env_name, '-y'],stdout=subprocess.PIPE,stderr=subprocess.STDOUT,text=True)for line in process.stdout:self.log_output.insert(tk.END, line)self.log_output.see(tk.END)process.wait()messagebox.showinfo("成功", f"在 {env_name} 中安裝了 {package_name}。")except subprocess.CalledProcessError as e:messagebox.showerror("錯誤", f"安裝包失敗: {e}")def activate_env(self, env_name):subprocess.run([self.conda_path, 'activate', env_name], check=True)messagebox.showinfo("激活", f"激活環境: {env_name}")def create_env(self):env_name = self.new_env_name.get().strip()python_version = self.python_version_entry.get().strip()  # 獲取輸入的 Python 版本if not env_name:messagebox.showwarning("警告", "請輸入新環境的名稱。")returnif not python_version:messagebox.showwarning("警告", "請輸入 Python 版本。")returntry:subprocess.run([self.conda_path, 'create', '--name', env_name, f'python={python_version}', '-y'], check=True)messagebox.showinfo("成功", f"創建新環境: {env_name},Python 版本: {python_version}。")self.new_env_name.delete(0, tk.END)self.python_version_entry.delete(0, tk.END)  # 清空 Python 版本輸入框self.refresh_envs()except subprocess.CalledProcessError as e:messagebox.showerror("錯誤", f"創建環境失敗: {e}")if __name__ == "__main__":root = tk.Tk()app = CondaEnvManager(root)root.mainloop()

最后通過執行:pyinstaller --onefile --windowed Conda.py,打包成可執行的exe文件即可

啟動的時候需要輸入conda所在目錄(本來我是想通過環境變量來設置,但是代碼里面讀取不到,于是就采取這種本方法了),比如我的conda安裝在:

那么啟動時輸入:?D:/install/anaconda3/condabin/conda.bat

PS:需要先安裝??pyinstaller和anaconda(或者miniconda),pyinstaller可以用pip安裝(pip install pyinstaller),conda的安裝就不在這里說了,跟普通的軟件安裝一樣,一直下一步即可

然后就是如何使用已經創建好的環境了,此處以pycharm為例,比如我創建了一個ai312的環境,那么在conda的安裝目錄的envs目錄下面就會生成一個ai312的目錄:

在pycharm里面選擇這個python.exe文件:

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/70738.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/70738.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/70738.shtml

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

相關文章

【復習】計算機網絡

網絡模型 OSI 應用層:給應用程序提供統一的接口表示層:把數據轉換成兼容另一個系統能識別的格式會話層:負責建立、管理、終止表示層實體之間的通信會話傳輸層:負責端到端的數據傳輸網絡層:負責數據的路由、轉發、分片…

圖書館系統源碼詳解

本項目是一個基于Scala語言開發的圖書館管理系統。系統主要由以下幾個部分組成:數據訪問層(DAO)、數據模型層(Models)、服務層(Service)以及用戶界面層(UI)。以下是對項目…

Redis——用戶簽到BitMap,UV統計

目錄 BitMap 使用場景 1. 用戶簽到系統 2. 用戶行為標記 3. 布隆過濾器(Bloom Filter) BitMap介紹 Redis中的使用 Redis功能示例 添加: 獲取: 批量獲取: java中實現 統計本月連續簽到次數 UV統計 UV 統計…

【數據庫】【MySQL】索引

MySQL中索引的概念 索引(MySQL中也叫做"鍵(key)")是一種數據結構,用于存儲引擎快速定找到記錄。 簡單來說,它類似于書籍的目錄,通過索引可以快速找到對應的數據行,而無需…

【SpringBoot AI 集成DeepSeek 大模型API調用】

當DeepSeek開始盛行,提供強大的大語言模型,界面調用不能滿足我們的需要,同時提供API接口供我們在服務中調用,來實現各種AI場景。 我們通過將DeepSeek的AI能力與SpringBoot AI相結合,實現智能聊天、問答機器人&#xf…

Linux 性能更好的ftp客戶端 lftp 使用詳解

簡介 LFTP 是一個命令行 FTP 客戶端,支持多種文件傳輸協議,包括 FTP、FTPS、HTTP、HTTPS和SFTP 。它以其通過鏡像、后臺操作和腳本支持等特性有效管理復雜傳輸的能力而聞名。 安裝 Ubuntu/Debian sudo apt update sudo apt install lftpCentOS/RHEL/…

汽車智能制造企業數字化轉型SAP解決方案總結

一、項目實施概述 項目階段劃分: 藍圖設計階段主數據管理方案各模塊藍圖設計方案下一階段工作計劃 關鍵里程碑: 2022年6月6日:項目啟動會2022年12月1日:系統上線 二、總體目標 通過SAP實施,構建研產供銷協同、業財一…

【深度學習】矩陣的理解與應用

一、矩陣基礎知識 1. 什么是矩陣? 矩陣是一個數學概念,通常表示為一個二維數組,它由行和列組成,用于存儲數值數據。矩陣是線性代數的基本工具之一,廣泛應用于數學、物理學、工程學、計算機科學、機器學習和數據分析等…

<網絡> UDP協議

目錄 傳輸層 再談端口號 端口號范圍劃分 認識知名端口號 兩個問題 netstat與iostat pidof UDP協議 UDP協議格式 UDP數據封裝: UDP數據分用: UDP協議的特點 面向數據報 UDP的緩沖區 UDP使用注意事項 基于UDP的應用層協 傳輸層 在學習HTTP等應用層協議時&…

大模型面試基礎問題

1.1.1 最主流的開源模型? ChatGLM-6B[1] prefix LM LLaMA-7B[2] causal LM 1.1.2 prefix LM和causal LM的區別? 1.1.2.1 Prefix LM Prefix LM,即前綴語言模型,該結構是Google的T5模型論文起的名字,望文知義來說&…

your HTTP request connection start duration too long

If your HTTP request connection start duration is taking more than 7 seconds, here are some possible causes and troubleshooting steps: Possible Causes: Network Latency – Slow internet or network congestion.DNS Resolution Delay – Slow DNS lookup affecti…

Python天梯賽系統備考-字符串篇

知識點拆解 1. 切片技巧 定義 通過 [start:end:step] 語法截取字符串的子序列 start:起始索引(包含,默認0) end:結束索引(不包含,默認末尾) step:步長&#xff0…

國標28181協議在智聯視頻超融合平臺中的接入方法

一. 國標28181介紹 國標 28181 協議全稱是《安全防范視頻監控聯網系統信息傳輸、交換、控制技術要求》,是國內視頻行業最重要的國家標準,目前有三個版本: 2011 年:推出 GB/T 28181-2011 版本,為安防行業的前端設備、平…

深入探究 C 語言內存函數:memcpy、memmove、memset 和 memcmp

一,常見的內存函數 在 C 語言的編程世界里,對內存的高效操作至關重要。C 標準庫為我們提供了一系列強大的內存操作函數,其中 memcpy、memmove、memset 和 memcmp 這四個函數是處理內存數據的得力助手。接下來,讓我們深入了解它們…

Java 集合

Java 集合 在 Java 編程中,集合框架(java.util 包)是處理一組對象的強大工具。與數組不同,集合提供了更靈活的數據存儲和操作方式。本文將詳細介紹 Java 集合框架的核心接口、常用實現類及其應用場景,幫助你更好地理解…

go基本語法

跟Java比較學習。 hello word 示例代碼 test1.go文件: // 包路徑 package main// 導入模塊,下面兩種都行 import ("fmt" ) import "log"// main方法 func main() {log.Print("hello word !!!")fmt.Print("hello …

【Docker】如何在Linux、Windows、MacOS中安裝Docker

Linux安裝Docker 在終端中執行一鍵安裝腳本命令安裝docker sudo curl -fsSL https://gitee.com/tech-shrimp/docker_installer/releases/download/latest/linux.sh | bash -s docker --mirror Aliyun1.1 配置docker鏡像源 在終端執行 一行命令,編輯配置文件 sudo …

2.24力扣-回溯電話號碼的字母組合

17. 電話號碼的字母組合 - 力扣&#xff08;LeetCode&#xff09; class Solution {List<String> ans new LinkedList<>();StringBuilder temp new StringBuilder();public List<String> letterCombinations(String digits) {if(digitsnull || digits.leng…

Cocos Creator Shader入門實戰(一):材質和Effect的了解

引擎版本&#xff1a;3.8.5 環境&#xff1a; Windows 簡介 在Cocos Creator中&#xff0c;游戲炫彩繽紛的效果是借助著色器(Shader)來實現的。 Cocos主要基于OpenGL ES&#xff0c;而Shader的編寫則是在可編程渲染管線中基于修改&#xff1a;頂點著色器(Vertex) 和 片段著色…

akka現有的分布式定時任務框架總結

根據你的需求&#xff0c;以下是一些基于 Akka 實現的分布式定時任務框架&#xff0c;以及相關的 GitHub 項目推薦&#xff1a; 1. Openjob Openjob 是一個基于 Akka 架構的新一代分布式任務調度框架&#xff0c;支持多種定時任務、延時任務、工作流設計&#xff0c;采用無中…