赞
踩
Tkinter
、强大的
PyQt5
和
PySide2
,还有
wxPython
。借助这些或内置或第三方的模块,我们可以轻松地编写跨平台的桌面图形界面程序。同时,我们还能直接使用
PyInstaller
、
Nuitka
、
cx_Freeze
等
Python
第三方程序打包模块,将编写好桌面图形界面程序打包为各个平台的二进制可执行程序文件,比如
Windows
下的
exe
程序执行文件。通常我们会将程序按需打包为单个的
exe可执行文件
或包含整个文件夹的可执行文件。
直接通过主程序进行下载;
编写一个单独的更新程序,主程序调用更新程序进行下载;
subprocess.Popen()
调用打包为单个文件的更新程序。然后更新程序再核对一遍是否存在版本更新,如果存在更新,那么继续请求远程服务器,下载新版本的程序。
程序文件的下载,我们可以直接使用
requests
模块,示例代码如下所示:
def work(self): # 新建一个文件对象 temp_file = os.path.join(self.download_path,'update.zip') # 指定更新包下载的路径 logger.info("下载临时文件路径为:{}".format(temp_file)) with open(temp_file,'wb') as self.fileobj: # 请求更新文件包 f = requests.get(self.download_url, stream=True) # 写入文件 offset = 0 for chunk in f.iter_content(chunk_size=self.buffer): if not chunk: break self.fileobj.seek(offset) self.fileobj.write(chunk) offset = offset + len(chunk) proess = offset / int(self.filesize) * 100 # logger.info("写入块:{},{}".format(offset,proess)) self.download_proess_signal.emit(int(proess))
def work(self): # 1.杀死主程序进程 for proc in psutil.process_iter(): if proc.name() == 'xxx.exe': proc.kill() # 2.获取程序本地路径 current_path = os.path.dirname(os.path.abspath(__file__)) logger.info("当前程序路径:{}".format(current_path)) # 3.解压新版本压缩包到程序本地路径 update_file_path = os.path.join(self.download_temp_path, 'update.zip') shutil.unpack_archive( filename=update_file_path, extract_dir=current_path ) # 4.删除临时文件夹和文件 os.remove(update_file_path) shutil.rmtree(self.download_temp_path)
这样,我们就实现了Python编写的桌面图形界面程序的更新检测、下载和覆盖安装。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。