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

43 天前
 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. 内网环境,网络无法连接互联网。

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

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

然后 add-key 所有机器 sudo apt install xxxx
IamLostInCoding
43 天前
pyinstaller 打包, 依赖自建软件源或者离线软件包
roundgis
43 天前
@fredsunme 為啥呢?
ltyj2003
43 天前
发个通知,让各单位自行领取光盘安装。
serical
43 天前
Nuitka 打包
sbldehanhan
42 天前
一看就是做国产化项目的。哈哈
julyclyde
42 天前
我就等等看有没有人回答 docker
fredsunme
41 天前
@roundgis #13 踩坑的人太少,都是新坑。kylin 上如果能接受自带的那个低版本的 pyqt 是最好的。

不然还是直接快跑吧
roundgis
41 天前
@fredsunme 早十年八年編譯 qt 都有一定的挑戰。前陣子有個前同事說在統信的源找不到新版 jdk 下載的又用不了 結果花了一個禮拜自己 build 了一個.....
fredsunme
41 天前
@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