这篇文章只讲pyinstaller
场景一 只打包单个文件
场景二 需要打包资源文件
场景三 资源文件中有逻辑程序,不能采用场景二方式
使用pyinstaller打包Python程序
场景一 只打包单个文件
安装工具 :pip3 install pyinstaller
在Python程序文件夹上(不点进去)按住shift并且右键,在弹出的选项中点击"在此处打开命令行窗口"或者“在此处打开PowerShell窗口”,CMD进来也可以
打包命令:pyinstaller -F -w (-i icofile) filename
filename表示你的Python程序文件名
-w 表示隐藏程序运行时的命令行窗口(不加-w会有黑色窗口)
括号内的为可选参数,-i icofile表示给程序加上图标,图标必须为.ico格式
icofile表示图标的位置,直接放在程序文件夹里面,打包的时候直接写文件名
最简单例如:pyinstaller -F test.py
输入完成,按回车自动打包
如果是很多文件组成的系统,只要用pyinstaller -F -w 入口主程序.py 即可
打包的exe在dist里面
场景二 需要打包资源文件 官网
先执行了打包命令,目录下会出现{你的py文件名}.spec,截图中其它文件请忽略
修改.spec,使其包含其它静态资源文件
就是改datas,数组格式,括号内第一个参数是文件名,第二个是文件夹名
执行 pyinstaller WebOfficeInstall.spec 将把文件打包进exe里
场景三 资源文件中有逻辑程序,不能采用场景二方式
主要是解决逻辑程序中的路径问题
通过这个方法可以把 音频,视频,图片,文本,压缩包,配置文件,脚本 等各种文件打包进exe中。
运行时会自动解压到当前目录,如果程序需要调用这些文件时,就可以调用了。
1. 转换为Base64 数据
这里有两个网站, 都是可以将任意文件转换为 Base64 数据文本的。
进到下面这其中一个网站中, 分别将你的文件进行转换, 然后复制得到的数据。
https://www.giftofspeed.com/base64-encoder/
https://www.zhangxinxu.com/sp/base64.html
2.在程序中使用生成的数据
首先呢,创建一个.py自建模块,在里面创建变量,分别把从网站得到的Base64数据以字符串的形式粘贴到变量里面。
注意:
1. 变量的类型必须是 字符串。
2. 一个变量的base64数据 只能放在一行,不要有分行。
有时候转的文件较大,粘贴的时候显得很卡,也没办法
例子:
下面是一个简单的运用,我创建了一个叫“get_file.py”的程序; 这个程序运行时,import了刚才创建的自建模块 DataFile,然后再把将文件写入到指定的位置。程序运行末尾结束了,就删除这些文件。
1 get_file.py 2 3 import os 4 import base64 5 import DataFile # 导入自建模块 "DataFile.py" 6 7 8 def write_file(data, route): 9 get_file = base64.b64decode(data) # 将base64数据进行解析 10 11 with open(route, 'wb') as f_Obj: # 输出文件到指定位置 12 f_Obj.write(get_file) 13 14 #-----调用函数,传入对应的 base64数据 和 输出文件的位置,生成依赖的资源文件-----# 15 write_file(DataFile.text, "./测试文本.txt") 16 write_file(DataFile.zip_pack, "./测试压缩包.zip") 17 write_file(DataFile.picture, "./测试图片.jpg") 18 19 20 #-----程序运行区域-----# 21 print("Hello world !") 22 input() # 暂停 23 24 25 #-----运行结束后删除目录下的依赖文件-----# 26 os.remove("./测试文本.txt") 27 os.remove("./测试压缩包.zip") 28 os.remove("./测试图片.jpg")
3.打包
pyinstaller -F test.py
参考:
https://blog.csdn.net/COLDRAIN_END/article/details/104385472