• 请不要在回答技术问题时复制粘贴 AI 生成的内容
Koril
V2EX  ›  程序员

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

  •  
  •   Koril · Mar 26, 2024 · 3566 views
    This topic created in 953 days ago, the information mentioned may be changed or developed.

    需求

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

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

    不然还是直接快跑吧
    roundgis
    roundgis
    Mar 28, 2024 via Android
    19
    @fredsunme 早十年八年編譯 qt 都有一定的挑戰。前陣子有個前同事說在統信的源找不到新版 jdk 下載的又用不了 結果花了一個禮拜自己 build 了一個.....
    fredsunme
    fredsunme
    Mar 28, 2024
    20
    @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 里说的
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2922 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 70ms · UTC 12:28 · PVG 20:28 · LAX 04:28 · JFK 07:28
    ♥ Do have faith in what you're doing.