【麒麟实训】撷英分享
文章重组提示 240730
240730
本文将以下文章进行聚合:
- 【麒麟实训】Deb 的打包(小练习分享)
- 【麒麟实训】撷英 1 - Pyqt 程序编译与打包探索
- 【麒麟实训】撷英 2 - Python 代码控制 word 文档模板
- 【麒麟实训】撷英 3 - Python 执行 Linux 命令公共方法
【麒麟实训】Deb 的打包(小练习分享)
练习 Deb 的打包流程。本文章为一次小练习的记录,操作过程多少有瑕疵,可能不适合实践参考。“实训撷英”专栏将有更专门的打包介绍。
文章部分内容来源于我的实训工作文档:《练习 1 过程文档(改进)》、《练习 2 过程文档(改进)》。规范的打包过程请参考《麒麟软件打包规范》。
Deb 的二进制文件打包
创建 DEBIAN 文件夹、etc、opt、usr 文件夹。
目录格式:
在 DEBIAN 文件夹下创建 control 文件:
企业老师给出的意见:
control 文件中包含空的关键字,应该删除,如 section 无对应信息则不存在。
最终的目录结构:
1 | . |
打包:
1 | sudo dpkg -b project project_v1.0.0_amd64.deb |
安装:
1 | sudo dpkg -i project_v1.0.0_amd64.deb |
新程序
运行效果
卸载:
1 | sudo dpkg -r project |
参考:deb打包流程步骤_逐渐江江江江化的博客-CSDN博客_deb打包
问题解决
开始菜单图标显示不出来的问题
请注意:图标目录Icons的名称和位置进行正确的设置、以及放置。参看上文给的目录树。
比如正确的放置方法时:icons/hicolor/128x128/下,还需要建立 apps 文件夹,里面放置 png 图标。
打包报错:软件包名字错误
注意,“Package”字段的内容,用“-”(减号)不用“_"(下划线)哦,否则会报以下错误:
借 shibo 同学的图
打包报错:与本机架构不符
1 | sudo dpkg --add-architecture amd64 |
参考:Ubuntu使用dpkg查看与修改architecture的用法_qiuchangyong的博客-CSDN博客
Deb 源码打包
下载源码压缩包,解压。
1 | tar zxvf p7zip.tar.gz |
将解压后的文件移动到构造好的目录中,得到以下目录结构:
1 | . |
企业老师给出的意见:
_ 不应该 _ 将源码文件全部存放到/opt/apps/p7zip 目录下(因为是二进制软件包,不应该将源码存放到对应目录下);不应该有空目录/usr/share/icons/hicolor
在/p7zip-16.02 目录下执行指令:
1 | dh_make --createorig -s |
生成 debian 文件夹。
修改 debian/control
在 rules 中添加 Override:
在 debian 下创建 install 文件,并写入以下内容:
执行 debuild 命令:
1 | debuild -i -us -uc -b |
这时,在源码文件的上一级目录会多出几个文件,其中就包括 deb 包:
执行安装:
1 | sudo dpkg -i p7zip_16.02_all.deb |
查看安装效果:
1 | sudo dpkg -l p7zip |
可以正常卸载:
1 | sudo dpkg -P p7zip |
卸载后查找不到 p7zip。
Deb 源码打包(野生方法)
从网上找来的自己摸索的方法。可能不符合麒麟软件的打包规范。这是初次练习的成果。
安装需要的工具:
1 | sudo apt-get install debmake |
生成 debian 文件夹配置文件:
1 | debmake -e [email protected] -p p7zip -u 16.02 -f "unknow unknow" -n |
命令解释:
- 邮件地址 [email protected]
- 软件包名 p7zip
- 软件版本号 16.02
- 作者全名 unknow unknow
命令执行后,会多出 debian 文件夹:
编辑 debian/control
生成 deb 包:
1 | sudo dpkg-buildpackage -us -uc -tc |
这是,在源码文件的上一级目录会多出几个文件,其中就包括 deb 包:
执行安装:
1 | sudo dpkg -i p7zip_16.02_amd64.deb |
查看安装效果:
1 | sudo dpkg -l p7zip |
其他
虚拟机 Kylin 系统的安装
请参看:使用VirtualBox安装Kylin桌面版操作系统 - 简书 (jianshu.com)
屏幕调大的命令:
1 | xrandr -s 1920x1200_60 # 在麒麟终端输入 |
自己多试一下:
图片失效
原文此位置包含图片,现链接已被覆盖造成丢失,且复查时存在疏漏。原图片命名为:image-70.png
或者在麒麟桌面设置那里调,一劳永逸。
tree 命令
安装:
1 | $ sudo apt-get install tree |
使用:
1 | $ tree |
参考:linux tree命令,Linux tree命令实例详解_章鱼老师的博客-CSDN博客
【麒麟实训】撷英 1 - Pyqt 程序编译与打包探索
本篇文章内容仅供简略参考。
文章内容来源于我的飞书文档>麒麟实训>大作业 - 编译与打包,更多问题的详细记录、示例文件以及调研文档请参看源文档。
Python 源码编译
python 编译
安装 pyinstaller:
1 | pip install https://github.com/pyinstaller/pyinstaller/tarball/develop |
只需对入口文件执行命令:
1 | # 两种打包方式 |
参考:
Python PyInstaller安装和使用教程(详解版) (biancheng.net)
PyQt5软件打包_王火火的博客-CSDN博客_pyqt打包
Pyqt 窗口图标
关于应用程序窗口图标显示问题可参考:http://t.zoukankan.com/jingsupo-p-13536449.html
加代码的地方:在 ui 转成的.py 文件
1 | self.setWindowIcon(QIcon(':/signal-slot-demo.ico')) |
打包后,编译生成的二进制文件的同级目录需要放上图标。
打包过程总览
- 按照《麒麟软件打包规范》构造 deb 包目录
- 打开源码项目执行
pyinstaller -D run.py -n signal-slot-demo
- 在 pyinstaller 中生成的 signal-slot-demo 文件夹中添加 icon 图标。并将该文件夹放入构造好的 deb 包目录下的/opt/apps/中
- 进入构造好的目录,执行命令:
debuild -i -us -uc -b
- 返回上一级目录执行:
sudo dpkg -i signal-slot-demo_1.0.0-1_all.deb
结果:运行正常。窗口图标、任务栏图标、开始菜单栏图标运行正常。(开始菜单栏中的图标是.desktop 文件中 Icon 指定的 svg 图标。程序窗口以及任务栏图标是 Pyqt 中代码指定的图标。)
具体文件示例
Control 文件
1 | Source: signal-slot-demo |
Install 文件
1 | opt/apps/signal-slot-demo/ /opt/apps |
.desktop 文件
1 | [Desktop Entry] |
【麒麟实训】撷英 2 - Python 代码控制 word 文档模板
通过 python 是可以控制 word 文档内容的,本篇文章简要介绍其原理,具体实现与实际案例可看我的开源项目。详细文档可查看我的飞书文档>麒麟实训>大作业 - 文档生成工具。
简介
文档生成工具主要通过对自动化适配工具生成的 csv 报告、html 报告进行读取、解析、整理,进而生成指定的 word 总报告。
项目地址:https://gitee.com/uuanqin/report_generator.git
基本原理
每一个 word 文档都可以通过 xml 表示,这个 xml 中包含文字信息和格式信息。通过给定的 doc 报告模板,我们可以以 xml 的方式进行操作,在实现增删改查 xml 元素的同时保持原有给定的格式基本不变。
业务流程
伪代码:
- 获取所有生成最终报告需要的源报告路径
- 根据路径对文件及文件夹进行读取
- 对每个文件中的数据提取、解析、整理
- 读取报告模板,填写每个部分的 word 表格
- “FAIL",“PASS” 字体染色
- 保存为中间文件 temp.xml
- 读取 temp.xml,替换其中的变量,保存为中间文件 麒麟操作系统适配认证自动化测试报告.xml
- 移动 麒麟操作系统适配认证自动化测试报告.xml 到目标文件夹中,修改后缀为.doc
效果示例
文档对象插入
关于 python 控制 word 中的文档对象可查看以下方法:
python在word文档里插入文件对象_奶爸大山的博客-CSDN博客_python word附件
经我与导师们实际调研与操作得到以下结论:
- 需要事先在 word 插入好文档对象,我们才可能通过代码改变这个文档对象。
- python 代码中只能改变文档对象指向的内容,新增加文档对象。
- 支持改变的文档对象只能是 xlsx 格式或 docx 格式,其他格式的文档对象插入时,生成的 ole.bin 文件暂时没找到办法进行生成。
【麒麟实训】撷英 3 - Python 执行 Linux 命令公共方法
废话不说,show you my code,自己看。
这些公共方法可以直接用于执行 sudo 指令、验证用户密码、以及执行普通命令。
1 | def sudo_verify(password:str): |