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目录


版权声明:本文为weixin_44295684原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。