找回密码
 立即注册
首页 业界区 安全 【坑死不偿命】之 Python Qt5 在 Centos7 Desktop 环境 ...

【坑死不偿命】之 Python Qt5 在 Centos7 Desktop 环境下打包

钿稳铆 2025-5-30 13:15:38
前言

最近有帮我朋友处理一个Python Qt5的程序,整体这个程序他们用户AI做了70%了,但是他们需要串联业务(把功能菜单通过tab切换、子窗口、stateWidget切换,业务调试等)就找到了我。好盆友嘛,吃了一个饭,发了我点零花钱,我就来帮忙了。那基本前期在windows下改代码、测试、打包都没问题了,最后,我朋友的朋友他们的工控设备使用centos7 桌面版,需要我把程序在这上面正常的跑起来。我听了:得加油。 然后,那边,准备好了虚拟机环境,这边我也开始。
过程

整个搭建qt环境的过程还是挺顺利的,我也是通过多个ai很快搞定
qt5 必要依赖
  1. #启用 EPEL 仓库
  2. sudo yum install -y epel-release
  3. # Qt5 核心库及开发文件
  4. sudo yum install -y qt5-qtbase-devel
  5. # 其他
  6. sudo yum install -y \
  7.   openssl-devel \
  8.   libX11-devel \
  9.   libXext-devel \
  10.   libXrender-devel \
  11.   libXcomposite-devel \
  12.   libXcursor-devel \
  13.   libXi-devel \
  14.   mesa-libGL-devel
复制代码
朋友们,你们就根据这个来吧,有问题问ai,缺啥补啥
第一个坑-openssl 版本问题

之前在win py version 是 3.10以上。寻思用pyenv 搞个一样的,结果, 你妹子的,它们那个centos openssl 版本 1.1以下,死活升不上去,然后py 3.10以上又必须要openssl 1.1以上。
最后,我拖鞋,py 换成3.9,解决问题
第二个坑-运行入口文件无法启动程序

我以为环境是最坑的,没想到啊,启动这个报错才最tm 恶心了。报错内容:
gdk message python:fatal io error 2(no such or diretory on x server:0)
国内外的AI专家问完了,你猜怎么着,结果,AI没给我解决到问题。这 尼玛的,怎么办呢,好在AI还是给我了思路,让我写个hello world 看看,排除扩展问题。
接着我成功运行了hello world,然后顺着思路,我单独启动了一些视图文件,也可以。这下,我就感觉肯定是哪个代码有问题了,我开始断点测试,测了老半天,异常捕获始终没效果,尽管入口文件也有处理器,还是没有被日志记录到。那说明问题不在python,在qt。
  1.    # 设置全局异常处理器
  2.     sys.excepthook = global_exception_handler
复制代码
当我把问题定位到qt里面,我才想到了,我最开始在网上搜到了一个在ubuntu 下 qt项目也报了和我这个类似的问题。峰回路转,我立马去仔细看他那个问题,根据它的描述,大致问题就是: setWindowIcon 这个在ubuntu下面使用就不行,那个技术朋友文章就屏蔽了这行代码解决问题。那我根据它的思路,也把python的这行代码注释后运行,奇迹发生,我的窗口活生生的出现在我眼前,好,问题解决。
  1.        # 设置应用图标
  2.         # 需要判断当前是否是mac和windows才能设置
  3.         if sys.platform == "darwin" or sys.platform == "win32":
  4.             icon_path = resource_path("images/logo.png")
  5.             if os.path.exists(icon_path):
  6.                 self.setWindowIcon(QIcon(icon_path))
  7.                 logging.debug(f"加载应用图标: {icon_path}")
  8.             else:
  9.                 logging.warning(f"图标文件不存在: {icon_path}")
  10.         else:
  11.             self.setWindowIconText("IASTest")
复制代码
第三个坑-PyInstaller版本老

建议最好升级下
第四个坑-磁盘容量不够,导致打包不完整

这个我当时没截图,就大概说下吧,它们虚拟机主分区磁盘空间严重不足,我打了n次都不行,后面看到了桌面有提示,这下我才感觉到问题,于是,我又去清理空间,最后打包成功并且程序正常使用。我把打包指令放出来
  1. # 查找 Qt5 插件路径(通常在虚拟环境或系统 Python 中)
  2. python -c "from PyQt5 import QtCore; print(QtCore.QLibraryInfo.location(QtCore.QLibraryInfo.PluginsPath))"
  3. # 假设输出为 `/home/li/.pyenv/versions/3.9.22/lib/python3.9/site-packages/PyQt5/Qt5/plugins`,修改命令:
  4. python -m PyInstaller --name="IASTest" \
  5.                       --icon=resources/images/logo.png \
  6.                       --add-data="resources:resources" \
  7.                       --add-data="config:config" \
  8.                       --add-data="db:db" \
  9.                       --add-binary="/home/li/.pyenv/versions/3.9.22/lib/python3.9/site-packages/PyQt5/Qt5/plugins/*:qt5_plugins" \
  10.                       --hidden-import=PyQt5.sip \
  11.                       --hidden-import=sqlalchemy.sql.default_comparator \
  12.                       --windowed \
  13.                       --clean \
  14.                       --noconfirm \
  15.                       app.py
复制代码
定义桌面应用程序快捷方式

在Linux系统中,.desktop文件是一种用于定义桌面应用程序快捷方式的特殊文件。对于CentOS用户来说,通过创建.desktop文件,可以轻松生成个性化的桌面启动器,从而方便地访问常用的应用程序。本文将详细介绍如何在CentOS系统中创建和使用.desktop文件。
了解 .desktop 文件

.desktop文件通常具有以下结构:
  1. [Desktop Entry]
  2. Name=应用程序名称
  3. Comment=应用程序描述
  4. Exec=应用程序执行命令
  5. Icon=应用程序图标路径
  6. Type=Application
  7. Categories=应用程序类别
复制代码

  • Name:应用程序的名称。
  • Comment:应用程序的描述。
  • Exec:执行应用程序的命令。
  • Icon:应用程序的图标路径。
  • Type:应用程序的类型,通常为Application。
  • Categories:应用程序的类别,用于桌面环境中的搜索和分类。
创建 .desktop 文件

这里我把python qt5 的项目编写到文件,其中Exec设置成我们打包后dist\项目下的可执行程序就行:
  1. [Desktop Entry]
  2. Name=IASTest
  3. Comment=My PyInstaller Application
  4. Exec=/home/li/iasTest/dist/IASTest/IASTest
  5. Icon=/home/li/iasTest/dist/IASTest/logo.png
  6. Terminal=false
  7. Type=Application
  8. Categories=Utility;Application;
  9. StartupNotify=true
  10. 以下是各个字段的意义:
复制代码
将 .desktop 文件放置在正确的位置

将创建的.desktop文件放置在以下目录之一:

  • /usr/share/applications/:适用于所有用户。
  • ~/.local/share/applications/:仅适用于当前用户。
更新
  1. sudo update-desktop-database ~/.local/share/applications
  2. sudo update-desktop-database /usr/share/applications
复制代码
效果

1.png

第五个坑-找不到串口

你妹子的,眼看都搞定了。测试发现找不到串口,哎。通过ai,我们只需要关机在vm里面添加串口设备(如果不行,还需要执行指令的,自行ai了),看我下面的图就行
2.png

总结

坑太多,我只想说:感觉这些计算机巨老们,创造了 deepseek 、豆包、千问、claude、gpt

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册