Python制作自己的软件安装包程序

news/2024/11/16 13:29:34/

Python制作自己的软件安装包程序

我看现在网上给自己的Python程序制作安装包一般都是使用inno setup,于是我突然想到能不能自己编写安装包程序(想快速了解制作方法的直接跳到最后)
首先肯定是要把安装包程序和安装的内容放进同一个exe中,而要安装的内容毫无疑问,肯定要放到压缩包里,那把安装程序和压缩包捆绑到一起用copy /b 安装程序.exe+file.zip output.exe这个命令就好了,运行起来也是会直接运行exe的(顺序不能反)
那问题就是如何从exe里提取出zip了,现在就出现了两种方法:

  1. 通过读取exe头信息来确定exe文件大小,从而切割文件
  2. 通过读取压缩包头信息来确定压缩包位置,从而切割文件(zip格式头信息为PK,7z为7z)

第一种方法我进行了尝试exe文件头信息格式
那思路清晰了,只需要读取偏移量为2-3h和4-5h的数据在进行计算就可以了,代码也就是这个样子:

with open("output.exe","rb") as f:f.seek(2,0)remainder = int.from_bytes(f.read(2), "little")quotient = int.from_bytes(f.read(2), "little")print(remainder,quotient)print(quotient*512+remainder)

大家不用试了,失败的很成功
具体原因我没想出来,知道的大佬可以说一下
于是我就采用了第二种方法,不断识别字节信息来确定压缩包位置,代码如下(7z压缩包就把第四行改为) if f.read(1) == b"7" and f.read(1) == b"z":

with open(executable,"rb") as f:#f.seek(5000000,0)while True:if f.read(1) == b"P" and f.read(1) == b"K":breakf.seek(f.tell()-2,0)zipdata = f.read()

这里我要解释一下,第四行不能写if f.read(2) == b"PK":啊,因为你无法确定P位于偶数位置,而由于Python的机制, f.read(1) == b"P"判断为假后这个and语句就一定为假,那么第二个判断就不会执行
大家还能看到我注释掉了一行代码,因为我发现这个代码执行速度很快,不需要跳过一段一定错误的数据(整个用时不足1秒)

制作过程如下

那接下来思路就明确了,代码奉上:

# -*- coding: utf-8 -*-
import zipfile
from subprocess import Popen
from sys import executablewith open(executable,"rb") as f:#f.seek(5000000,0)while True:if f.read(1) == b"P" and f.read(1) == b"K":breakf.seek(f.tell()-2,0)zipdata = f.read()
with open("file.zip","wb") as f:f.write(zipdata)
with zipfile.ZipFile("file.zip") as f:f.extractall("temp")
Popen("start .\\temp\\main.exe",shell=True)

这里我没有做图形化,如果你想做就直接写就行了,Popen是用来调起你的软件的,不需要可以注释掉
写完封装成exe,然后用copy /b命令捆绑就行了
想添加自启动之类的用winreg操作注册表即可,详情自己百度


http://www.ppmy.cn/news/440131.html

相关文章

Inno Setup 软件安装包制作

Inno Setup历史下载 官网: https://jrsoftware.org/isinfo.php 历史版本: https://jrsoftware.org/ 下载下来,一路默认安装即可, 安装完成打开,显示如下 在官网下载的是没有中文语言包的,这需要自己下…

软件包下载地址(一)

http://www.inter7.com/index.php?pagesoftware 邮件相关软件下载 http://ilohamail.org/main.php?pageDownloads 开源邮件IlohaMail安装包下载 http://squirrelmail.org/documentation/ php开源的quirrelmail帮助文档 http://squirrelmail.org/docs/admin/admin-3.h…

下载eclipse linux32位软件安装包怎么那么难

下载eclipse linux32位软件安装包 多年不用eclipse,沉迷于jetbrains系列无法自拔。终于,我的工作不得不要用eclipse了! 情景是这样的,电脑的linux系统是redhat6.4 32位的,于是乎我想找个最新版适用于linux 32位系统的…

软件安装包分享

自己在开发中遇到一些急需的软件往往因为找不到合适的安装包而烦恼,将自己用过的一些安装包分享给大家(收集不易,还望大家支持) Multium安装包https://www.xiaocifang.com/i/UI5659a757GBQ.html 3D MAX 2018软件安装包安装教程htt…

快速创建软件安装包-ClickOnce

目录 1. 什么是ClickOnce 2. 使用ClickOnce创建安装包 2.1 需要服务器 2.2 开始制作安装包 2.3 上传 2.4 程序安装、运行 3. Q&A 参考资料 今天介绍使用ClickOnce制作软件安装包,首先我们先了解什么是ClickOne。 1. 什么是ClickOnce 以下段落摘自微软…

2021-10-03各类安全软件安装包分享

各类安全软件安装包分享 各类安全软件安装包分享 下载好的一些网络安全渗透学习软件,图上是软件目录,有需要的可以直接下载。 nikto nessus awvs D盾 AppScan9.0.3.7 w3af1.0stablesetup网站漏洞扫描.exe ZAP 2100windows.exe HRSwordv5.0.47单文件.exe…

软件包安装和下载

安装软件的三种方法 1.rmp工具安装rmp包 与Windows下的.exe文件比较像,不需要太多设置。安装路径,文件名基本都是固定好的 2.yum工具安装rpm包 yum是Red Hat 所特有的安装RPM程序包的工具。在centos里使用yum是免费的,而在Red Hat 中是收费…

SolidWorks 2023软件安装教程SW2023软件安装包

sw软件介绍: SOLIDWORKS 2023是领先的智能软件,使用强大的设计、分析和制备能力,旨在即时制造各种高端、复杂的产品,具有强大的能力和领先的技术,提供先进的建模技术和广泛的模块,以提高产品质量和性能。在…