PyQt5 编写的 GUI 软件,在 Linux 下部署的最佳实践是什么? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
Koril
V2EX    程序员

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

  •  
  •   Koril 2024-03-26 12:53:04 +08:00 2707 次点击
    这是一个创建于 630 天前的主题,其中的信息可能已经有所发展或是发生改变。

    需求

    现在有一个基于 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. 内网环境,网络无法连接互联网。

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

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

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

    不然还是直接快跑吧
    roundgis
        19
    roundgis  
       2024-03-28 17:04:07 +08:00 via Android
    @fredsunme 早十年八年 qt 都有一定的挑。前子有前同事在信的源找不到新版 jdk 下的又用不了 果花了一拜自己 build 了一.....
    fredsunme
        20
    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 里说的
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1182 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 17:29 PVG 01:29 LAX 09:29 JFK 12:29
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86