1.环境准备
1.1 如果需要多平台运行,需要准备好打包编译的环境如ARM/X86,两套环境编译后的文件只能在各自的平台上运行,我这里准备的环境为如下
2.依赖安装
2.1 首先需要安装python编译库
pip3 install pyinstaller
2.2 确保你的系统上已经安装了rpm-build包,如果没有安装,可以使用以下命令进行安装:
sudo yum install rpm-build # For Red Hat, CentOS, Fedora
sudo apt-get install rpm-build # For Ubuntu, Debian
3.打包文件准备
3.1 首先准备需要打包的python的源文件
就是你需要打包的py文件
3.2 准备需要打包的RPM的spec文件
spec文件规范如下附件,需要按照这个规范来编写
3.3 X86 编写spec
Summary: XXX tool
Name: tool name
Version: 1.0.9
Release: 2
License: GPLv2+
Group: Applications/System
BuildArch: x86_64
%description
This is a command line tool to get PCIe device information.
%files
%defattr(-,root,root,-)
/usr/bin/pcietool
%install
mkdir -p %{buildroot}/usr/bin
cp %{_sourcedir}/pcietool %{buildroot}/usr/bin
%clean
rm -rf %{buildroot}
%post
#Optional post-installation scripts or commands
%preun
#Optional pre-uninstallation scripts or commands
%postun
#Optional post-uninstallation scripts or commands
3.4 arm编写spec
Name: pcietool
Version: 1.0.9
Release: 1%{?dist}
License: MIT
Group: Applications/System
Summary: tool
#依赖关系
Requires: python3
%description
This is a command line tool to get PCIe device information.
#描述文件的安装位置和权限
%files
%defattr(-,root,root,-)
/usr/bin/pcietool
%prep
%build
%install
mkdir -p %{buildroot}/usr/bin
cp %{_sourcedir}/pcietool %{buildroot}/usr/bin
%clean
rm -rf %{buildroot}
%files
%defattr(-,root,root,-)
/usr/bin/pcietool
4.打包
4.1首先将py文件打包成二进制可执行文件,因为py文件里依赖了很多运行库和python的库,这里可以使用一键打包成一个可文件(文件会比较大,因为会把所有运行依赖都打包到这里),X86和ARM通用
pyinstaller --onefile tool.py
如下提示就是打包成功
打包成功之后会在打包目录生成一个dist文件夹,这个就是打包成功之后的二进制文件
4.2 打包成rpm包
将上面dist目录的二进制文件拷贝到rpm 的/root/rpmbuild/SOURCES目录下
执行打包命令,可以在RPM按照的SPECS目录下执行,也可以在脚本目录执行都可以,前提是需要存在打包的spec文件,我这里直接在脚本目录打包,需要注意的是:打包的spec文件需要和打包的二进制文件同一个命名
执行命令,我这里执行加的参数是bb,意思就是只构建二进制包,也可根据自己的需求自行编译。
rpmbuild -bb mypackage.spec # 根据你的spec文件名定义
编译成功之后会在该目录生成这个rpm文件包,(X86和ARM不在同一个目录,可自己查看编译后的路径)可下载执行rpm -ivh 安装,如果之前有安装过可添加rpm -ivh --force参数