前言
我编写了一些python程序,但我并不满足与只用命令行运行,我希望能构建一个具有界面的桌面客户端应用,来运行我python程序的各种功能。
作为一个前端工程师,我最熟悉的当然就是Electron,这是构建桌面应用最强大的利器。但Electron与python语言平台基本毫无关系,而且也比较重,Electron内置了V8引擎和Chrome内核,如果我只专注于编写python程序,这些也用不太上。
所以,再三考虑之后,我转战了pywebview
。
pywebview
这是一个可以使用前端技术编写GUI的python开源框架,它核心解决了两个问题:
- 提供跨平台的webview展示能力,这就可以轻松在程序中展示前端网页程序。
- 可以集成python的HTTP server,比如Flask。
以上两项能力,就将一个客户端的开发逻辑,转为了我们最熟悉的Web前后端分离开发逻辑。整个框架的API不多,属于轻量化的,只是搭建了一个桥梁,具体功能,用户可以以普通的Web开发方式实现。
实战思路
由于代码较多,我就不展示了,具体参考官方文档吧,这里总结下思路。
服务端
我们可以创建一个Flask服务器,即做接口服务,有又作为前端静态文件的转发服务。至于前端代码的构建。
前端
用前端的工具链构建就可以,比如React+Webpack。
打包与构建
程序成功运行之后,还需要考虑打包的成可执行文件的问题。这里用到了pyinstaller
和NSIS
,pyinstaller负责打包成exe,NSIS负责构建安装包。这个过程比较难,尝试了很久,如果通关了,就可以把程序做成windows安装包了。
兼容性
构建完成后,去win7系统上运行,遇到了兼容性的问题。
- python版本需要降到3.8,pyinstaller打包完的程序才能执行。
- 前端页面需要兼容IE 11,win7系统的webview引擎默认是IE 11。