给Python程序制作高大上的windows安装包

2023-12-25 23:40

本文主要是介绍给Python程序制作高大上的windows安装包,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

上一篇文章 怎么实现软件更新? 已经说过要要结合更新到启动,实现软件启动时自动更新,这一篇我们就讲讲怎么实现这一步,另外我们还要让我们的软件像一个正常使用的软件那样实现安装。

一、启动时更新

这一步其实是最简单的, 在上一篇文章 怎么实现软件更新? 里,我们已经用一个函数main()把整个过程封装起来,所以我们只需要在我们的软件代码的主程序里引入这个函数,并且放到其他语句的最前面。

# 引入函数
from update import main
# 中间代码省略...
if __name__ == '__main__':# 放在最前面main()app = MainWindows()app.mainloop()
使用pyinstaller制作文件
  1. 最简单的方法就是:
pyinstaller -w -F main.py

参数解释:

  • -F 表示生成单个文件,比如上面的命令就是生成 main.exe
  • -w 表示不要控制台显示,就我们测试时经常看到的那个黑漆漆的cmd框,让用户使用时当然不希望用户看到这么丑的一个东西出现呀,所以去除控制台
  • -p 表示自定义加载的类路径,一般情况不用
  • -i 表示可执行文件的图标
    用这种方法生成的文件直接就是可执行文件了,当然也不用考虑安装了,我们常说的绿色软件就差不多是这样了,免安装,拿到就可以用,而且我们还贴心的自动更新,人性化不。
  1. 文件夹方式:
pyinstaller -w main.py

其实也简单,不加-F 就是直接生成一个文件夹。
运行命令.gif
打包完成后,会生成一个dist文件夹,打开里面会有一个main文件夹,就是与我们的命令的主文件名一样,再打开main,里面还有一个main.exe。这个就是我们正常的执行文件,可以双击运行。
运行文件.gif
呃,怎么出错了,这难道就是大型翻车现场!!!
其实,问题很简单,还记得我们的更新文件吗?如果不记得可以看看我们的上一篇文章 怎么实现软件更新?, 由于软件启动首先要运行的是自动更新,而我们的更新文件需要一个json, 所以启动当然出错。
把文件放进文件夹,再来一次。
正常运行.gif
这下可以正常运行了。其实,大家如果看的仔细,应该知道,这里的自动更新是有问题的,因为我们上一篇文章实际上是针对的单个执行文件,而不是文件夹的,当然这里只是演示一下,相信朋友们自己琢磨下,也能做出针对文件夹的自动更新。原理都是一样的。

二、如何让软件能够安装

上面的内容总的来说还是一个回顾和配置前提,是为这一部分做的提前准备。我们为什么要打包成文件夹形式呢?因为接下来我们要用的工具就是针对文件夹的。还有文件夹形式相对于单个执行文件,大小会小一点。

使用HM NIS Edit

这个软件可以让我们制作出非常正式的安装包,就像大家常用的QQ安装包一样。接下来,就让我们一起看看。
首先,双击打开HM NIS Edit编译器。

图标是什么,没看懂,感觉有点像乌贼。进入软件界面。点击文件选择新建脚本:向导
向导.gif

点击下一步, 填写应用程序信息:

继续下一步,基本上是默认,不用更改,不过安装程序语言要选择simpChinese,也就是简体中文,不然安装时就会出现乱码。

接着下一步, 这一步,应用程序默认目录就是用户按装时会出现的默认选项,我们设置了允许用户更改。授权文件其实就是用户安装时会出现的关于应用的一些说明,授权你使用的范围。我们随便写了一个。


授权文件

下一步后,出现下面第一张图片内容,点击修改文件路径,这里添加程序所在的整个目录:


配置完成再点下一步, 这里直接默认就好了:

第七步也是默认:

第八步为卸载相关设置,可以根据自己需要设置:

最后,点保存脚本,保存好后,脚本会自动进行编译:


虽然前面的设置,基本上能满足所有需求,不过我们的软件有引入一些库,而这些库是在子文件夹下的,如下所示:

而这些,子文件夹,我在测试时,发现不能通过前面的设置直接安装到安装文件夹下,导致软件启动不了。所以我们要在编译脚本里做以下的修改:

# 编译成setup.exe文件时的操作
Section "MainSection" SEC01SetOutPath "$INSTDIR"SetOverwrite ifnewerFile "main\main.exe"File /r "main\*.*" # 这里是修改后的内容,添加一个/r符号,可以递归CreateDirectory "$SMPROGRAMS\敦煌工具"CreateShortCut "$SMPROGRAMS\敦煌工具\敦煌工具.lnk" "$INSTDIR\main.exe"CreateShortCut "$DESKTOP\敦煌工具.lnk" "$INSTDIR\main.exe"
SectionEnd# 卸载时的操作
Section UninstallDelete "$INSTDIR\${PRODUCT_NAME}.url"Delete "$INSTDIR\uninst.exe"Delete "$INSTDIR\*.*" # 修改内容,删除安装文件夹下的所有内容Delete "$INSTDIR\main.exe"Delete "$SMPROGRAMS\敦煌工具\Uninstall.lnk"Delete "$SMPROGRAMS\敦煌工具\Website.lnk"Delete "$DESKTOP\敦煌工具.lnk"Delete "$SMPROGRAMS\敦煌工具\敦煌工具.lnk"RMDir "$SMPROGRAMS\敦煌工具"RMDir /r "$INSTDIR\*.*" # 修改内容,可以完整的删除安装文件夹DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}"DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}"SetAutoClose true
SectionEnd

三、安装测试

经过上面的步骤后,如果一切设置正确,编译完成后会直接启动安装程序。其实在保存文件夹下有个setup.exe文件,双击启动也可以。

第一步,启动软件:

第二步,前面所说的授权文件内容就是在这里显示的:

第三步,选择安装的地址,用户可以自己修改:

第四步,开始安装:

第五步,安装完成,可以结束也可以直接运行我们的软件:

这时,在启动目录里也有了相应的卸载工具:

第六步,运行软件,可以出现我们的软件界面了,输入内容测试也能正常使用:

第七步,卸载测试,这里是直接从安装目录里下载工具进行操作的,方便展示,大家从启动目录里操作,效果也是一样:

最后

就这样,我们就把自己做的软件包装成一个高大上的正式软件了,怎么样?学会了吗?有什么不懂的,可以关注我的公众号 Python与跨境电商 一起讨论,文中示例已经上传至百度网盘,公众号 Python与跨境电商 回复关键词:安装软件 获取

这篇关于给Python程序制作高大上的windows安装包的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/537384

相关文章

Python将博客内容html导出为Markdown格式

《Python将博客内容html导出为Markdown格式》Python将博客内容html导出为Markdown格式,通过博客url地址抓取文章,分析并提取出文章标题和内容,将内容构建成html,再转... 目录一、为什么要搞?二、准备如何搞?三、说搞咱就搞!抓取文章提取内容构建html转存markdown

Python获取中国节假日数据记录入JSON文件

《Python获取中国节假日数据记录入JSON文件》项目系统内置的日历应用为了提升用户体验,特别设置了在调休日期显示“休”的UI图标功能,那么问题是这些调休数据从哪里来呢?我尝试一种更为智能的方法:P... 目录节假日数据获取存入jsON文件节假日数据读取封装完整代码项目系统内置的日历应用为了提升用户体验,

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整

Python Websockets库的使用指南

《PythonWebsockets库的使用指南》pythonwebsockets库是一个用于创建WebSocket服务器和客户端的Python库,它提供了一种简单的方式来实现实时通信,支持异步和同步... 目录一、WebSocket 简介二、python 的 websockets 库安装三、完整代码示例1.

揭秘Python Socket网络编程的7种硬核用法

《揭秘PythonSocket网络编程的7种硬核用法》Socket不仅能做聊天室,还能干一大堆硬核操作,这篇文章就带大家看看Python网络编程的7种超实用玩法,感兴趣的小伙伴可以跟随小编一起... 目录1.端口扫描器:探测开放端口2.简易 HTTP 服务器:10 秒搭个网页3.局域网游戏:多人联机对战4.

使用Python实现快速搭建本地HTTP服务器

《使用Python实现快速搭建本地HTTP服务器》:本文主要介绍如何使用Python快速搭建本地HTTP服务器,轻松实现一键HTTP文件共享,同时结合二维码技术,让访问更简单,感兴趣的小伙伴可以了... 目录1. 概述2. 快速搭建 HTTP 文件共享服务2.1 核心思路2.2 代码实现2.3 代码解读3.

Python使用自带的base64库进行base64编码和解码

《Python使用自带的base64库进行base64编码和解码》在Python中,处理数据的编码和解码是数据传输和存储中非常普遍的需求,其中,Base64是一种常用的编码方案,本文我将详细介绍如何使... 目录引言使用python的base64库进行编码和解码编码函数解码函数Base64编码的应用场景注意

Python基于wxPython和FFmpeg开发一个视频标签工具

《Python基于wxPython和FFmpeg开发一个视频标签工具》在当今数字媒体时代,视频内容的管理和标记变得越来越重要,无论是研究人员需要对实验视频进行时间点标记,还是个人用户希望对家庭视频进行... 目录引言1. 应用概述2. 技术栈分析2.1 核心库和模块2.2 wxpython作为GUI选择的优

Python如何使用__slots__实现节省内存和性能优化

《Python如何使用__slots__实现节省内存和性能优化》你有想过,一个小小的__slots__能让你的Python类内存消耗直接减半吗,没错,今天咱们要聊的就是这个让人眼前一亮的技巧,感兴趣的... 目录背景:内存吃得满满的类__slots__:你的内存管理小助手举个大概的例子:看看效果如何?1.

Python+PyQt5实现多屏幕协同播放功能

《Python+PyQt5实现多屏幕协同播放功能》在现代会议展示、数字广告、展览展示等场景中,多屏幕协同播放已成为刚需,下面我们就来看看如何利用Python和PyQt5开发一套功能强大的跨屏播控系统吧... 目录一、项目概述:突破传统播放限制二、核心技术解析2.1 多屏管理机制2.2 播放引擎设计2.3 专