Python程序在Windows、Ubuntu、Centos系统上的安装包的打包流程
一、 Windows打包
1. 相关应用
Windows上使用HM NIS Edit打包工具进行打包,需要提前安装好NSIS环境
2. 前提条件
ExLabeler打包成文件夹的格式,使用命令pyinstaller main_dir.spec打包到dist目录下
3.打包步骤
打开HM NIS Edit工具,从“文件”->“新建脚本:向导”,进入到安装向导(1/9)。
填写公司信息(2/9)
选择安装好后的图标显示,ExLabeler下Icon目录中有相关图标(3/9)
授权信息如下,可保存成txt再进行选择(4/9)
选择打包的文件路径,删除自带的默认项,然后增加目录,选中相应目录(确定后会有一段时间等待)(5/9)
配置安装,可不做修改(6/9)
配置安装,可不做修改(7/9)
配置卸载,,可不做修改(8/9)
完成向导,勾选保存脚本,便于下一步操作(9/9)
在脚本Section “MainSection” SEC01后加入如下代码后进行编译,即可打包成功:
以下为为能从浏览器中唤起应用程序需要加入的代码
Section -WriteRegistry
WriteRegStr HKEY_CLASSES_ROOT "exClient" "" "exClient Protocol"
WriteRegStr HKEY_CLASSES_ROOT "exClient" "URL Protocol" ""
WriteRegStr HKEY_CLASSES_ROOT "exClient\DefaultIcon" "" "$INSTDIR\exLabeler.exe"
WriteRegStr HKEY_CLASSES_ROOT "exClient\shell\open\command" "" '"$INSTDIR\exLabeler.exe" "%1" '
;针对当前用户有效
WriteRegStr HKCU "SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" "$INSTDIR\exLabeler.exe" "RUNASADMIN"
;针对所有用户有效
WriteRegStr HKEY_LOCAL_MACHINE "SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" "$INSTDIR\exLabeler.exe" "RUNASADMIN"
SectionEnd
删除之前写的获取管理员权限注册表
;针对当前用户有效
DeleteRegValue HKCU "SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" "$INSTDIR\exLabeler.exe"
;针对所有用户有效
DeleteRegValue HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers" "$INSTDIR\exLabeler.exe"
二、 Ubuntu打包
1. 相关应用
dpkg
2. 前提条件
在用户根目录新建mydeb
按如下目录结构新建文件夹,该文件夹在安装后会映射到/目录下:
|——mydeb
|——usr
|——local
|——lib
|——可执行文件(安装后,就在你的/usr/local/lib生成相应的可执行文件)
|——share
|——icons
|——exlabeler.png(图标文件生成到/usr/share/icons/)
|——applications
|——exLabeler.desktop(桌面文件生成到/usr/share/applications/)
|——DEBIAN(大写、用来制作打包文件)
|——control(描述deb包的信息必须的文件,注意是文件)
|——postinst(描述deb包安装后执行的脚本,注意是文件)
其中,control文件内容
package: exLabeler
version: 1.6.3.3
architecture: i386
maintainer: Karl
description: label tools
其中,postinst文件内容
#!/bin/sh
update-desktop-database
可执行文件为pyinstaller打包好的文件夹
exLabeler.desktop文件内容如下
[Desktop Entry]
Name=exlabeler
Comment=标注工具
Exec=/usr/local/lib/ExLabeler/exLabeler %u # %u为接收的参数
Icon=/usr/share/icons/exLabeler.png
Terminal=false
Type=Application
X-Ubuntu-Touch=true
Categories=Development
MimeType=x-scheme-handler/exlabeler
Name[en_US]=exlabeler
3. 打包步骤
sudo dpkg -b ~/deb exLabler_setup_%{version}_%{date}_Ubuntu.deb
三、 Centos打包
1.相关应用
sudo yum install make
sudo yum install gcc
sudo yum install rpm-build
sudo yum install rpmdevtool
2.前提条件
执行 rpmdev-setuptree 该条命令会在当前用户目录下生成文件树
将pyinstaller打包的文件夹重命名为exLabeler-%{版本号},打包成exLabeler.tar,移动或复制到~/rpmbuild/SOURCE目录下
将快捷方式exlabler.desktop、可执行文件exLabeler、图标exLabeler.png一同放置在SOURCE目录
vi ~/.rpmmacros
找到这行
%__arch_install_post /usr/lib/rpm/check-rpaths /usr/lib/rpm/check-buildroot
注释掉,避免check-rpaths报错
加入这行
%define debug_package %{nil}
避免打包debug安装包在SPEC目录下新建spec文件
exLabeler.spec内容如下:
Name: exLabeler
Version: %{当前版本号}
Release: 1%{?dist}
Summary: label tools
Group: Development/Tools
License: GPL
URL: http://www.exocr.com
Source0: exLabeler.tar
Source1: exLabeler
Source2: exlabeler.desktop
Source3: exLabeler.png
%define debug_package %{nil} # 避免打debug.rpm
%define __os_install_post %{nil} # 防止打包过程对.so文件进行strip操作,导致安装结束后无法运行
%description
%prep #安装前操作
%setup -q
%build
%install
mkdir -p %{buildroot}/usr/local/lib/ExLabeler
cp -r %{_builddir}/%{name}-%{version}/* %{buildroot}/usr/local/lib/ExLabeler
mkdir -p %{buildroot}/usr/local/bin
cp %{SOURCE1} %{buildroot}/usr/local/bin
mkdir -p %{buildroot}/usr/share/applications
cp %{SOURCE2} %{buildroot}/usr/share/applications
mkdir -p %{buildroot}/usr/share/icons
cp %{SOURCE3} %{buildroot}/usr/share/icons
%post #安装后操作
update-desktop-database
%clean
rm -rf %{buildroot}
%files
…… # 加入需要打包的文件
%changelog
* Wed Aug 25 2021 Licheng <li.cheng@exocr.com> 1.6.3.3
- Build the program
3.打包步骤
rpmbuild -bb main.spec
生成的rpm包在RPMS目录