Python编写的桌面图形程序,如何实现版本更新和下载?
Python爬虫与数据挖掘
共 2629字,需浏览 6分钟
·
2021-06-19 22:38
回复“书籍”即可获赠Python从入门到进阶共10本电子书
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)
------------------- End -------------------
往期精彩文章推荐:
欢迎大家点赞,留言,转发,转载,感谢大家的相伴与支持
想加入Python学习群请在后台回复【入群】
万水千山总是情,点个【在看】行不行
/今日留言主题/
随便说一两句吧~~
评论