目录:
一,开发需求和开发思路
1.开发需求
python作为一门超级语言,其第三方库众多,适合我们用于二次开发成其他功能的程序,那么管理这些第三方库的工具就不得不说pip了!pip工具能让我们更加方便地管理第三方库,但是如何不在集成IDE专业软件上(pycharm那种),本地环境使用的pip工具只能在打开的cmd中操作命令。首先,每次都需要打开cmd窗口是一件较麻烦的事,其次,对于一个库(查询,下载安装,卸载)指令不连续,且要重复输入不同的指令,这让我们的工作和生活的时间和精力都浪费在这些麻烦事了!那么我们是否可以开发出一个pip工具GUI程序,能减轻pip工具带来的麻烦事呢?
答案是可以的,让我们一起来探索吧!
文末附上这个项目的GitHub地址链接!
2.开发思路
pip工具操作缺点 | 对应解决思路 |
---|---|
每次都需要打开并在cmd窗口运行 | 让程序自动化地执行对应操作(多数情况下不打开cmd窗口) |
对于同一个库,pip指令输入不连续 | 在GUI窗口集成常见的pip工具指令功能,减少输入亢余 |
3.前期准备
知识储备 | 备注 |
---|---|
面向对象编程:类和对象 | 使用类,能使程序二次开发和维护更好,并且程序代码模块化和结构明了,利于阅读和开发 |
GUI开发tkinter | python自带的tkinterGUI编写,虽然总体UI界面不比主流美观,但是开发简单,且外观逻辑上能满足我们的需求 |
pyinstaller | python常见且流行的打包程序库,需要下载安装 |
二,编写代码
1.PIPS.py
该PIPS.py文件主要放置PIPS类,PIPS类主要有执行对应的pip操作的方法!
import os
class PIPS:#PIPS类:主要存储具体的pip指令实际操作的类
def __init__(self):
pass#暂无类变量,设为pass就行
def install(self,packages):#下载安装的cmd操作函数
cmd='pip install '+packages
operation = os.popen(cmd)#不同打开cmd窗口,就可以运行命令
return operation.read()#返回成功后的信息内容
def uninstall(self,packages):#卸载的cmd操作函数
cmd='pip uninstall '+packages#由于要在cmd中做二次选择(y或n),所以要打开cmd窗口
os.system(cmd)
def piplist(self):#库列表的cmd操作函数
cmd='pip list'
operation = os.popen(cmd)
return operation.read()
def checkpip(self,packages):#库查询的cmd操作函数
cmd='pip show '+packages
operation = os.popen(cmd)
return operation.read()
def uppip(self,packages):#更新库的cmd操作函数
cmd='python -m pip install --upgrade '+packages
operation = os.popen(cmd)
return operation.read()
def opencmd(self):#cmd打开窗口操作函数
os.system('cmd/c start')
2.PIPGUI.py
该PIPGUI.py文件(是主程序)主要放置PIPGUI类,PIPGUI类主要是GUI编写的类和导入并使用前面的PIPS类的方法。
from tkinter import *
from PIPS import PIPS
class PIPGUI(PIPS):
#GUI控件类定义
def __init__(self):
super().__init__()#继承自PIPS类
#主窗体
root=Tk()
root.title('pip下载程序')
root.geometry('1020x550+200+80')#程序窗口大小及位置
root.iconbitmap('pips.ico')#窗口图标
# install按钮
install_button = Button(root, text='下载并安装', width=18, height=2, command=self.installs)
install_button.place(x=20, y=100)
# uninstall按钮
uninstall__button = Button(root, text='卸载', width=18, height=2, command=self.uninstalls)
uninstall__button.place(x=200, y=100)
# 库列表按钮
list_button = Button(root, text='第三库列表', width=18, height=2, command=self.piplists)
list_button.place(x=20, y=160)
# 查询库信息按钮
checkp_button = Button(root, text='库查询', width=18, height=2, command=self.checkpips)
checkp_button.place(x=200, y=160)
# pip指令更新按钮
up_button = Button(root, text='更新库包', width=18, height=2, command=self.uppips)
up_button.place(x=20, y=220)
# cmd打开按钮
self.cmd_textout_button = Button(root, text='打开cmd窗口', width=18, height=2, command=self.opencmds)
self.cmd_textout_button.place(x=200, y=220)
# 输入框清空按钮
self.in_textout_button = Button(root, text='清空输入框', width=18, height=2, command=self.in_textouts)
self.in_textout_button.place(x=200, y=280)
#cmd运行内容清除按钮
self.cmd_textout_button=Button(root, text='清空cmd运行结果', width=18, height=2, command=self.cmd_textout)
self.cmd_textout_button.place(x=20,y=280)
# 运行内容显示
self.cmd_text = Text(root, width=85, height=40)
self.cmd_text.place(x=400, y=10)
# 输入显示窗口
self.in_text = Text(root, width=50, height=2)
self.in_text.place(x=20, y=10)
# 程序状态标签
self.tip_label = Label(root, text='程序操作提示', width=35, height=2, bg='green', font=('宋体', 14))
self.tip_label.place(x=20, y=430)
# 操作提示栏
self.tipout_label = Label(root, width=50, height=3, bg='green',font=('宋体',10))
self.tipout_label.place(x=20, y=485)
root.mainloop()
# 函数部分:
def text_get(self): # 获取输入框内容函数
return self.in_text.get('1.0', 'end')
def cmd_in(self,result): # cmd运行结果输入函数
self.cmd_text.insert(1.0, result)
def cmd_textout(self): # cmd内容清除函数
self.cmd_text.delete('1.0', 'end')
self.tipout_label['text'] = '你清空了cmd运行内容框!'
def installs(self): # 下载安装按钮函数
self.cmd_textout()
self.tipout_label['text'] = '你使用了下载安装的功能!注意使用前不要开代理节点!'
result = self.install(self.text_get())
self.cmd_in(result)
def uninstalls(self): # 卸载按钮函数
self.cmd_textout()
self.tipout_label['text'] = '不要输入带有等号的命令!请到弹出的cmd窗口确定是否卸载!'
self.uninstall(self.text_get())
def piplists(self): # 库列表按钮函数
self.cmd_textout()
self.tipout_label['text'] = '你查询了库列表,查询结果可下滑查看更多的内容'
result = self.piplist()
self.cmd_in(result)
def checkpips(self): # 库查询按钮函数
self.cmd_textout()
self.tipout_label['text'] = '注意输入时不要带有等号!'
result = self.checkpip(self.text_get())
self.cmd_in(result)
def uppips(self): # 库更新按钮函数
self.cmd_textout()
self.tipout_label['text'] = '你使用了库更新的功能!'
result = self.uppip(self.text_get())
self.cmd_in(result)
def in_textouts(self):#输入框清除函数
self.in_text.delete('1.0', 'end')
self.tipout_label['text'] = '你清空了输入框窗口!'
def opencmds(self):#cmd打开窗口操作函数
self.opencmd()
self.tipout_label['text']='你打开了cmd窗口!'
if __name__ == '__main__':
PIPGUI()
三,程序打包
1,打包过程
(1)找到自己代码文件的目录,复制下来
(2)打开cmd窗口,把复制的目录复制到cmd窗口,并在前加cd,如下例所示:
(3)确认已经下载安装好pyinstaller,输入如下指令:
pyinstaller -F <程序主文件>.py
(4)在生成的文件中,只保留<主程序>.spec文件,其余都删除(当然我们原来的py代码文件也在该目录下,肯定不用删除,保留就行)!如下:
(5)打开后缀为.spec文件,在Analysis中的第一行的列表,再添加我们主程序依赖和要导入的模块PIPS.py文件的字符串形式,如下图:
(6)再重新打开cmd,进入文件目录,输入以下指令:
pyinstaller -F <主程序名>.spec
如下图:
(7)提示打包成功后,我们可以删除生成的_pycache_和build文件,只保留dist文件夹,因为这里面放置了生成exe程序,另外程序窗体要用到pips.ico文件,默认打包是不会把它移到dist文件夹的,我们要复制到dist文件下!
2.功能操作描述和使用
打包好的程序,打开后界面如下:
以下是各部分功能描述:
控件 | 功能描述 |
---|---|
输入框 | 接受输入的库名,根据对应的命令功能,可添加指定的版本号 |
cmd运行结果框 | 把cmd运行结果输入到该框内显示,最右边最大的即是该框 |
下载并安装按钮 | 下载并安装库 |
卸载按钮 | 卸载库,点击后需要到附带的cmd窗口内填y(是)或n(否),填完不用关闭该窗口 |
第三方库列表按钮 | 点击后,即可把安装到本地的第三库总列表,并把信息反馈到cmd运行结果框 |
库查询按钮 | 查询对应的库信息,并把信息反馈到cmd运行结果框 |
更新库包按钮 | 更新对应的库,并把信息反馈到cmd运行结果框 |
打开cmd窗口按钮 | 打开新的cmd窗口 |
清除cmd运行结果按钮 | 点击后把cmd运行结果框的内容都清空了 |
清除输入框按钮 | 点击后把输入框内容清空 |
程序操作提示 | 主要对程序各个功能操作的一些提示 |
3.开发问题中遇到的问题及解决方法汇总:
pyinstaller打包python程序(多文件)
Python-Tkinter图形化界面设计(详细教程 )
四,程序成品下载
为了更好地学习和分享该部分的内容,以及提供成品程序给大家直接观摩,特意放资源链接在此,供各位读者下载!
pip指令GUI程序下载链接
如果大家有条件的话,可以到我的Github去看我的项目文件及代码,下面附上GitHub项目地址:
Python-tool-development-pip-instruction-GUI-program
最后,文中如有不足,敬请批评指正!