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

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

  •  
  •   Koril · 270 天前 · 2075 次点击
    这是一个创建于 270 天前的主题,其中的信息可能已经有所发展或是发生改变。

    需求

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

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

    不然还是直接快跑吧
    roundgis
        19
    roundgis  
       268 天前 via Android
    @fredsunme 早十年八年編譯 qt 都有一定的挑戰。前陣子有個前同事說在統信的源找不到新版 jdk 下載的又用不了 結果花了一個禮拜自己 build 了一個.....
    fredsunme
        20
    fredsunme  
       268 天前
    @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   ·   实用小工具   ·   2733 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 12:45 · PVG 20:45 · LAX 04:45 · JFK 07:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.