PyQt5 编写的 GUI 软件,在 Linux 下部署的最佳实践是什么?

2024-03-26 12:53:04 +08:00
 Koril

需求

现在有一个基于 PyQt5 的 GUI 应用,运行在 Linux 环境下,主要的依赖项如下:

  1. PyQt5+PyQtWebEngine
  2. opencv-python, Pillow
  3. dlib
  4. gphoto2
  5. Flask 以及 Flask 相关的一些依赖

部署环境

系统环境:统信 UOS ,麒麟,Ubuntu 。

部署数量:上百台的台式机。

网络环境:无法连接互联网,全部处于内网环境


问题

  1. PyQt5 编写的 GUI 程序如何部署在这么多的桌面系统上,有什么最佳实践吗?
  2. 虚拟环境和包管理的选择,用 python3-venv + python3-pip 么?
  3. pip 无法连接中央库或者镜像源,需要自己在内网搭建包仓库么?
  4. 后续 Python 代码更新,如何升级到每个台式机上?
  5. PyQt5 中嵌入了浏览器展示 Vue 的页面,这些静态页面,如何升级到每个台式机上?

限制

  1. 无法更改编程语言和 GUI 框架,只能是 Python + PyQt5 。
  2. 内网环境,网络无法连接互联网。

我在这方面是个新手,恳请各位前辈和大佬给予指点,告诉一些方向和最佳实践,不胜感激!

2553 次点击
所在节点    程序员
20 条回复
NessajCN
2024-03-26 13:18:27 +08:00
- 内网机子找一台弄个 git repo
- 把 site-packages 里的依赖和 pyqt 脚本推到 git repo 上
- 其他所有机子装好 python 后 clone 这个 repo
- 更新代码只需要推一遍 repo 其他 pull
debuggerx
2024-03-26 13:44:04 +08:00
Nuitka
ZnductR0MjHvjRQ3
2024-03-26 14:43:32 +08:00
搭一个内网的 docker 仓库 然后每次更新 docker 镜像做自动更新
或者做一个内网中控 远程 shell
masterclock
2024-03-26 14:48:03 +08:00
AppImage 打成单文件
opiviqo
2024-03-26 15:30:54 +08:00
再生龙直接 copy 硬盘 然后 pyinstaller 打包后删除源码
march1993
2024-03-26 15:34:08 +08:00
学工业软件的方式咯,依赖全部打包,运行的时候是启动一个 bash 文件,会配置所有的 path 变量,然后启动
sakilascott
2024-03-26 15:39:02 +08:00
用不着花里胡哨的。
所有依赖打个包,写个安装脚本,nginx 搭个文件服务器,给个下载链接就完了。
后续更新,做个弹框,点击链接自动执行升级脚本。
hyperbin
2024-03-26 17:19:58 +08:00
@NessajCN 明显依赖里有一堆非 pypi 范围内的库
wangdk23411
2024-03-26 17:27:16 +08:00
AppImage 打成单文件,这种方案更合适
fredsunme
2024-03-26 17:27:50 +08:00
如果是 arm 麒麟建议快跑
hokori
2024-03-26 17:31:35 +08:00
直接按标准自建一个软件源

然后 add-key 所有机器 sudo apt install xxxx
IamLostInCoding
2024-03-26 18:06:16 +08:00
pyinstaller 打包, 依赖自建软件源或者离线软件包
roundgis
2024-03-26 19:36:00 +08:00
@fredsunme 為啥呢?
ltyj2003
2024-03-26 19:40:45 +08:00
发个通知,让各单位自行领取光盘安装。
serical
2024-03-26 19:50:24 +08:00
Nuitka 打包
sbldehanhan
2024-03-27 12:00:48 +08:00
一看就是做国产化项目的。哈哈
julyclyde
2024-03-27 18:17:01 +08:00
我就等等看有没有人回答 docker
fredsunme
2024-03-28 14:29:04 +08:00
@roundgis #13 踩坑的人太少,都是新坑。kylin 上如果能接受自带的那个低版本的 pyqt 是最好的。

不然还是直接快跑吧
roundgis
2024-03-28 17:04:07 +08:00
@fredsunme 早十年八年編譯 qt 都有一定的挑戰。前陣子有個前同事說在統信的源找不到新版 jdk 下載的又用不了 結果花了一個禮拜自己 build 了一個.....
fredsunme
2024-03-28 17:31:40 +08:00
@roundgis #19 qt 是 qt, pyqt 是 pyqt. 前者在 kylin 编译挺顺畅的,直接走默认。
kylin 的 apt 带了 pyqt 的源,且系统自带 5.14 。但是该版本已经缺 svg, opengl, x11extras 等包
如果是需要 pyqt 5.15 ,就只能自行编译。国内甚至国外成型文章的里,都在让你直接编译,尽管他们的文章排版精美思路清晰,甚至结果也能运行简单的 demo ,但还是会缺上述几个包。
一旦用到了,还是得 apt 补包+重新编译 pyqt
我最后就是去 qt 论坛和 github 靠着近乎没啥关系的报错找到了这些缺失的包需要的依赖。
然后运行时还要看你用的库, 可能还需要指定 platform, -platform xcb 这种你也无法直接靠报错关键字搜到,都是从描述的状态来找到相关文章的。

所以说新坑太多。太小众了,你还得 opencv ,我没记错的话,有个依赖包能找到就是别人在 github 上 opencv 的 issues 里说的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1027095

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX