前言

用Pyinstaller进行打包exe时,有时候得附带上一些资源,提高程序的实用性和人性化。 在网上也有很多把依赖文件打包进exe的方法,不过都只能打包一些图片或者文本而已。 另一种方法是通过修改PyInstaller配置文件*.spec来实现打包的方法,虽然挺不错,但是似乎不能移植到其他设备上。所以我翻阅文献后,查找到两种方式:NSIS程序base64数据
参考文献:
https://blog.csdn.net/COLDRAIN_END/article/details/104385472
https://blog.csdn.net/qq_51523386/article/details/112122852

准备工作

请先安装pyinstaller库NSIS软件

pip install pyinstaller

方法一:base64数据转换法

这种方法的原理是将附属文件转换成base64的格式,在需要时解压到目录中。(注:base64所支持的文件类型不限于图片)

1.准备好你所需要打包的所有文件,放在同一文件夹内。

2.依次将所有文件(不包括文件夹)放入下列网站转换为base64数据。
https://www.giftofspeed.com/base64-encoder/
https://www.zhangxinxu.com/sp/base64.html

在程序中调用数据并创建文件

3.将获取到的数据粘贴到一个py文件中,用来存储数据。

#这里每个键对应每个文件及其所在位置
#例如Demo3和Demo4都带上了pic文件前缀,值对应base64数据
#注意这里不要有换行,我这里文件数据太大就省略了一部分
dic = {'Demo1.zip':'UEsFBgAAAAAAAAAAAAAAAAAAAAAAAA==',
'Demo2.html':'RGVtbzIuaHRtbA==',
'pic/Demo3.png':'RGVtbzMucG5n',
'pic/Demo4.ico':'RGVtbzQuaWNv'
}

4.调用数据的程序。

dic = {'Demo1.zip':'UEsFBgAAAAAAAAAAAAAAAAAAAAAAAA==',
'Demo2.html':'RGVtbzIuaHRtbA==',
'pic/Demo3.png':'RGVtbzMucG5n',
'pic/Demo4.ico':'RGVtbzQuaWNv'
}import os
import base64def write_file(data, route):get_file = base64.b64decode(data)     # 将base64数据进行解析with open(route, 'wb') as a:       # 输出文件到指定位置a.write(get_file)#-----调用函数,传入对应的 base64数据 和 输出文件的位置,生成依赖的资源文件-----#
for i in dic:try:path = os.path.split(os.path.realpath(i))[0]os.makedirs(path)except:Nonewrite_file('%s' % dic[i], i)

包装成exe文件

在cmd中输入

pyinstaller -F -w main.py
#-F:打包后只生成单个exe格式文件;-w:不使用控制台
#别忘了定位到当前目录

关于打包exe的更多事宜,可见Pyinstaller打包py文件。

成品


dist里的exe执行就能出现文件了

小结

这个方法适用于几乎所有格式的文件(文件夹除外),而且程序不用安装可以直接使用,但写程序需要将一个一个文件都写进去,文件一大就容易卡顿,会较为麻烦费时

方法二:NSIS软件

准备工作

例子

main.py

from PIL import Image,ImageTk
import tkinter as tk# 简单插入显示
def show_jpg():root = tk.Tk()root.geometry('500x500')with open('Demo1.txt') as o:k = o.readlines()[0]def fuction():root1 = tk.Toplevel()im=Image.open('Demo3.jpg')img=ImageTk.PhotoImage(im)tk.Label(root1,image=img).pack()root1.mainloop()tk.Button(text=k,command=lambda:fuction()).pack(fill='x')im=Image.open('Demo2.jpg')img=ImageTk.PhotoImage(im)tk.Label(root,image=img).pack()root.mainloop()if __name__ == '__main__':show_jpg()

预览运行:

附属文件

将文件放入一个空文件夹里(等会打包需要用)。

注意:这种方法在资源文件夹中不能有别的文件夹,如果真的想要分类的话,可以找到这张图,运行一个将资源分类的程序。

将主程序的代码打包成exe文件(仅限主文件),可以回看前文。

编译安装包

1.安装并打开NSIS软件。


2.Ctrl+W新建脚本向导。
3.点击下一步,填写程序的对应信息

4.点击下一步,自主修改(语言建议添加英语)。

5.点击下一步下一步(中间的自主修改),删除授权文件
6.点击下一步删除默认文件

7.添加已经打包的exe源文件

8.添加附属文件资源包

9.建议单独添加每个子文件

10.点击下一步下一步下一步下一步(中间的自主修改),勾选保存脚步转换文件路径到相对路径

11.点击完成,并保存脚本。

12.运行脚本。

最后就会在桌面上找到一个Setup的exe。

运行就会开始安装程序,我们的打包也结束了。

小结

与原作者所说不同,这种方法可以适用于所有exe文件,而且可以附带很多资源,而且也不会太卡顿,但是资源文件夹里不能放别的文件夹,这也是它的弊端,而且作为一个安装包,它似乎不可以访问注册表。下一篇文章我会着手于用python自制一个安装包软件。

将python打包成exe文件(携带附属文件)相关推荐

  1. 把python语言翻译出来_Python语言实现翻译小工具(Python打包成exe文件)

    本文主要向大家介绍了Python语言实现翻译小工具(Python打包成exe文件),通过具体的内容向大家展示,希望对大家学习Python语言有所帮助. 1.环境 windows10 python3.5 ...

  2. python打包成.exe文件时出现“系统找不到指定路径”

    python打包成.exe文件时出现"系统找不到指定路径" 我在一开始写工程时就想到最后打包的时候可能会出现文件位置会发生移动,所以并没有使用绝对路径,而都是以相对路径写的程序. ...

  3. Python打包成exe,文件太大问题解决办法

    Python打包成exe,文件太大问题解决办法 原因 解决办法 具体步骤 情况一:初次打包 情况二:再次打包 原因 由于使用pyinstaller打包.py文件时,会把很多已安装的无关库同时打包进去, ...

  4. python如何将图片打包进exe里_史上最详细的Python打包成exe文件教程

    打包成exe文件可以让python代码在没有python环境的条件下,依然能够运行,实在是码农们写追女朋友表白.情人节浪漫的必需品! 1.使用豆瓣镜像源下载: pyinstaller 有需要了解如何使 ...

  5. Python打包成exe文件_详细操作

    Python打包成exe文件 前言 一.安装pyinstaller 1.1 安装pyinstaller,使用安装命令: 1.2 如果遇到需要更新版本请输入: 1.3 检查是否正确安装 1.4 稍等,水 ...

  6. 解决 Python打包成exe 文件过大问题的一些方法

    前言 之前有做过Python的pyqt桌面应用,当时每次更新打包的时候整个文件下来都需要300~400M,但是一直没有找到合适的方法解决,而是尽量Python少安抓库包,但效果一般,最近找到了解决方法 ...

  7. Tips--解决Python打包成exe文件大启动慢的问题

    解决Python打包成exe文件大启动慢的问题 1. 问题描述 2. 产生原因 2. 解决方法 2.1 建立虚拟环境 2.2 安装所需库 2.3 在环境中打包 2.4 附pyinstaller参数表 ...

  8. python打包成.exe程序

    一.需求 有些时候,我们想做个带图形化界面的小工具用于pc端,使用MFC当然可以,java也有何不可,那么使用python呢?是否也可以把带有图形化界面的python程序打包成.exe程序?答案是肯定 ...

  9. cmd python封装成exe_别再问我怎么Python打包成exe了!

    也许我们不一定是专业的程序员,但是我们仍然可以通过代码提高我们的效率,尽量少加班,多陪陪媳妇(如果有).再不行,让代码替我们干着重复的工作,我们有节省出来的时间打游戏不好嘛,是吧,哈哈哈. 但是呢,我 ...

  10. 别再问我怎么Python打包成exe了!

    作者 | Python进阶者 来源 | Python爬虫与数据挖掘 阅读文本大概需要 10 分钟 前言 也许我们不一定是专业的程序员,但是我们仍然可以通过代码提高我们的效率,尽量少加班,多陪陪媳妇(如 ...

最新文章

  1. Dynamo涉及的算法和协议——p2p架构,一致性hash容错+gossip协议获取集群状态+向量时钟同步数据...
  2. 电商课题I:集群环境下业务限流
  3. MPLS的几种备份方式——Vecloud
  4. java元婴期(19)----java进阶(spring(3)----AOP相关概念实现方式)
  5. Touch - 全能名片王
  6. Spring boot(十二):Spring boot 如何测试、打包、部署
  7. 手机怎么进ph_明日发布,华为鸿蒙OS2.0手机版特色功能曝光
  8. for in for of区别_Python 第4课:for…in循环黄金搭档之range()函数
  9. uc android 4.2,uc网盘下载10.4.2 安卓版-uc网盘手机版西西软件下载
  10. 《阿里巴巴Java开发手册(正式版)》--安全规约
  11. Spark性能优化之-数据倾斜
  12. 写在虚拟机闪退,red hat挂了之后
  13. 爬虫图片mysql_爬取微博图片数据存到Mysql中遇到的各种坑\爬取微博图片\Mysql存储图片\微博爬虫...
  14. 测绘资质办理需要注意的流程和规定
  15. Cg语言学习笔记(1)
  16. 野蛮成长的健身行业何时能迎来春天?
  17. 中国农业银行笔试详解
  18. 区块链实验五 : 挖矿交易2
  19. 关于催款程序的构思与实现
  20. 发明计算机的人的名人名言,60句关于发明的名言

热门文章

  1. JavaScript面试题及答案
  2. MMORPG大型游戏设计与开发(服务器 游戏场景 动态场景与副本)
  3. 比较给你看!Pixel 3做出数字变焦与拟光学变焦的差距
  4. canvas 画图
  5. pkl压缩包改成.pkl文件
  6. org.hibernate.QueryException: Unmatched braces for alias path问题记录(目前不知道什么问题导致)
  7. 幻痛 机器人_合金装备5幻痛那个大机器人怎么样打 | 手游网游页游攻略大全
  8. NRF52840-最小系统板
  9. 数据库JSON类型映射到java实体类中的对象——MyBatis框架
  10. PageAdmin CMS 建站软件Sql Server2008 R2数据库安装教程