日常纠结之 Windows 客户端开发技术方案选项

发布时间: 2023-07-30 20:47:54 作者: 大象笔记

需求背景

最近一天内接到两个 Windows 客户端的开发需求:

  1. 将 Android 上的农产品图像识别,移植到 Windows 系统上。使用客户端实现,而非网页。运行 pytorch yolov5 生成的模型
  2. 实现一个概率统计的 Windows 客户端,带本地数据库存储功能

虽然,最近忙得一塌糊涂,没有时间去动手实现,但是技术选型问题一直困扰着我,成为了我的心头大患。因为我自己也有很多小需求想用 GUI 客户端实现,苦于没有顺手的方案一直搁置中。

恰好,赶上去浙江出差,单程行车 9 个小时,给了我充足时间可以去纠结选项问题。

首先 pass 掉一切 js 相关跨平台的方案,没有为什么,就是单纯的厌恶。

Compose Multi Platform

优势:

劣势:

WinForm / WPF

优势:

劣势:

tkinter

突然想到是否可以尝试一下 Python 系的 GUI 方案,最近业余一直在写 Python。 我自己都很意外,本以为将 golang 做为主语言之后,就再也没有机会大规模写 Python 了。 没想到随着 AI 的兴起,无论是语言模型训练,还是图像识别,又再次用到了 Python,而且还是重度使用。

Python 语法真是很难忘掉,就像流淌在血液中一般,那为何不尝试一下 Python 的 GUI 方案呢?

对比了几个方案:

所有的 python GUI 方案,都面临着一个问题,就是打包问题。总不能发给客户一个 python 源码文件吧,肯定得打包成一个 exe 可执行文件。pyinstaller 打包出的单文件大小倒是可以接受,30M 以上,但是首次加载速度我真是忍不了,4 到 5 秒的启动速度,我感觉羞于给他人展示。还有其他的打包方案,看起来都不是很理想。特别是不确定打包时是否会引入恐怖的 pytorch 巨型依赖包。

我觉得,如果是开发自用工具的化,python tkinter / flet 都是不错的方案,但是如果是商业产品必须要解决启动速度问题。这个需要详细测试一下各种打包方案。

Golang GUI 方案

最近看到 Rust / Golang 都有不少基于 WebView2 的跨平台方案,有尝试的冲动。

但是唯一担心的是对深度学习模型支持不够,遇到坑没法填平。

结论

目前我最倾向于使用 C# 的 WinForm,次之是 Python 的 flet。

虽然大家都觉得 WinForm 是一项已经淘汰的技术,但是我觉得适合自己的才是好的技术。

我是一名山东烟台的开发者,联系作者