当前位置: 首页 > news >正文

利用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文件:

相关文章:

利用python和gpt写一个conda环境可视化管理工具

最近在学习python,由于不同的版本之间的差距较大,如果是用环境变量来配置python的话,会需要来回改,于是请教得知可以用conda来管理,但是conda在管理的时候老是要输入命令,感觉也很烦,于是让gpt帮…...

sort_values、sort 和 sorted 的区别与用法详解

sort_values、sort 和 sorted 是 Python 中用于排序的工具,但它们的适用场景和行为有所不同。以下是它们的区别和用法详解: 1. sort_values 适用对象 Pandas 的 Series 或 DataFrame。 功能 对 Pandas 数据结构中的值进行排序。 特点 专为 Pandas 设…...

银行系统功能架构设计元模型

1. 元模型核心目标 ​规范性:定义功能模块的标准化描述方式,便于跨团队协作。​可复用性:抽象通用组件,减少重复开发。​可扩展性:支持未来业务创新和技术升级(如开放银行API集成)。​2. 元模型层级结构 采用分层架构模式,分为以下核心层级: ​**(1) 业务功能层** ​…...

rabbitmq 延时队列

要使用 RabbitMQ Delayed Message Plugin 实现延时队列,首先需要确保插件已安装并启用。以下是实现延时队列的步骤和代码示例。 1. 安装 RabbitMQ Delayed Message Plugin 首先,确保你的 RabbitMQ 安装了 rabbitmq-delayed-message-exchange 插件。你可…...

idea + Docker + 阿里镜像服务打包部署

一、下载docker desktop软件 官网下载docker desktop,需要结合wsl使用 启动成功的画面(如果不是这个画面例如一直处理start或者是stop需要重新启动,不行就重启电脑) 打包成功的镜像在这里,如果频繁打包会导致磁盘空间被占满,需…...

Vue 3 零基础入门:从计数器应用开始你的工程化之旅 - 深入理解 Vue 3 响应式系统

引言 欢迎来到 Vue 3 + 现代前端工程化 系列技术博客! 本系列博客旨在通过每日构建一个小项目,帮助您深入学习 Vue 3 的各项核心特性,并掌握现代前端工程化的实践技能。 在接下来的系列文章中,我们将从零开始,由浅入深,逐步构建一系列实用的小型应用。 今天,作为本系列…...

批量将手机照片修改为一寸白底证件照的方法

生活中经常需要用到一寸白底证件照,但每次去照相馆拍摄既费时又麻烦。其实,利用手机拍照和批量证件照生成工具,就能轻松批量修改手机照片为一寸白底证件照。 首先,在电脑浏览器中打开【报名电子照助手】,找到“批量证件…...

【Docker基础】理解 Docker:本质、性质、架构与核心组件

文章目录 Docker 本质Docker 的引擎迭代Docker 和虚拟机的区别Docker 为什么比虚拟机资源利用率高,速度快?Docker 和 JVM 虚拟化的区别Docker 版本1. LXC (Linux Containers)2. libcontainer3. Moby4. docker-ce5. docker-ee总结: Docker 架构…...

LeetCodehot 力扣热题100 全排列

这段代码的目的是计算给定整数数组的所有全排列(permutations),并返回一个包含所有排列的二维数组。 思路解析 在这段代码中,采用了 深度优先搜索(DFS) 和 回溯 的方法来生成所有的排列。 关键步骤&#xf…...

SQL笔记#数据更新

一、数据的插入(INSERT语句的使用方法) 1、什么是INSERT 首先通过CREATE TABLE语句创建表,但创建的表中没有数据;再通过INSERT语句向表中插入数据。 --创建表ProductIns CREATE TABLE ProductIns (product_id CHAR(4) NOT NULL,product_name VARCHAR(1…...

GCC 和 G++的基本使用

GCC 和 G 命令 GCC 和 G 命令GCC(GNU C 编译器)基本用法常用选项示例 G(GNU C 编译器)基本用法常用选项示例 GCC 与 G 的区别选择使用 GCC 还是 G C编译流程1. 预处理(Preprocessing)2. 编译(Co…...

Maven中一些基础知识点

早些时候只知道创建或者开发springboot项目时候,有一个叫pom.xml的文件可以用来管理项目所需的依赖/第三方工具。 索性稍微深入了解了一下,然后把自己认为重要的记录下来。 首先我们要引入新的依赖自然是在dependencies下写dependency,这个…...

论文阅读笔记:Deep Face Recognition: A Survey

论文阅读笔记:Deep Face Recognition: A Survey 1 介绍2 总览2.1 人脸识别组件2.1.1 人脸处理2.1.2 深度特征提取2.1.3 基于深度特征的人脸对比 3 网络结构和损失函数3.1 判别损失函数的演化3.1.1 基于欧式距离的损失3.1.2 基于角度/余弦边距的损失3.1.3 Softmax损失…...

JVM生产环境问题定位与解决实战(三):揭秘Java飞行记录器(JFR)的强大功能

提到飞行记录器,或许你的脑海中并未立刻浮现出清晰的画面,但一说起“黑匣子”,想必大多数人都能恍然大悟,知晓其重要性及用途。在航空领域,黑匣子作为不可或缺的设备,默默记录着飞行过程中的每一项关键数据…...

爬虫框架与库

爬虫框架与库是用于网络数据抓取的核心工具,帮助开发者高效地从网页中提取结构化数据。 Requests:用于发送HTTP请求。 BeautifulSoup:用于解析HTML和XML。 Scrapy:强大的爬虫框架,适合大规模爬取。 Selenium&#…...

PyTorch常用函数总结(持续更新)

本文主要记录自己在用 PyTorch复现经典模型 过程中遇到的一些函数及用法,以期对 常见PyTorch函数 更加熟练~ 官方Docs:PyTorch documentation — PyTorch 2.6 documentation 目录 数据层面 torch.sign(tensor) torch.tensor(np.eye(3)[y]) torch.on…...

代码异常(js中push)NO.4

1. 环境 Vue3,Element Plsu 2. 示例代码 const { updateBy, updateTime, ...curObj } form.valuecurObj.id props.tableData.length 1var newTableData props.tableData.push(curObj)updateTableData(newTableData)3. 情景描述 newTableData变成了整数&#…...

Anaconda 2025 最新版安装与Python环境配置指南(附官方下载链接)

一、软件定位与核心功能 Anaconda 2025 是Python/R数据科学集成开发平台,预装1500科学计算库,新增AI模型可视化调试、多环境GPU加速等特性。相较于传统Python安装,其优势包括: 环境隔离:通过conda工具实现多版本Pyth…...

Vue 中动态实现进度条

在 Vue 中动态实现进度条,基本上有两种常见的方法:直接通过 Vue 数据绑定控制样式,或者利用外部库来实现更复杂的功能。我们会深入探讨这两种方式,并且详细说明每种方法的实现步骤、优缺点以及使用场景。 1. 使用 Vue 数据绑定来…...

CSS滚动条原理与自定义样式指南,CSS滚动条样式失效,滚动条样式无效,-webkit-scrollbar无效,overflow不显示滚动条

滚动内容形成的必要条件 CSS Overflow属性解析 MDN官方文档-Overflow属性 菜鸟教程-Overflow属性 overflow 属性控制内容溢出元素框时在对应的元素区间内是否添加滚动条。 值描述visible默认值。内容不会被修剪,会呈现在元素框之外。hidden内容会被修剪&#xf…...

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向: 逆向设计 通过神经网络快速预测微纳结构的光学响应,替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八

现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...

如何为服务器生成TLS证书

TLS(Transport Layer Security)证书是确保网络通信安全的重要手段,它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书,可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

聊一聊接口测试的意义有哪些?

目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...

【Redis】笔记|第8节|大厂高并发缓存架构实战与优化

缓存架构 代码结构 代码详情 功能点: 多级缓存,先查本地缓存,再查Redis,最后才查数据库热点数据重建逻辑使用分布式锁,二次查询更新缓存采用读写锁提升性能采用Redis的发布订阅机制通知所有实例更新本地缓存适用读多…...

【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)

LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 题目描述解题思路Java代码 题目描述 题目链接:LeetCode 3309. 连接二进制表示可形成的最大数值(中等) 给你一个长度为 3 的整数数组 nums。 现以某种顺序 连接…...

【Veristand】Veristand环境安装教程-Linux RT / Windows

首先声明,此教程是针对Simulink编译模型并导入Veristand中编写的,同时需要注意的是老用户编译可能用的是Veristand Model Framework,那个是历史版本,且NI不会再维护,新版本编译支持为VeriStand Model Generation Suppo…...