V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
Koril
V2EX  ›  程序员

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

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

    需求

    现在有一个基于 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 麒麟建议快跑
    hokori
        11
    hokori  
       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   ·   实用小工具   ·   2637 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 10:09 · PVG 18:09 · LAX 03:09 · JFK 06:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.