我们开发的脚本一般都会用到一些第三方包,可能别人也需要用到我们的脚本,如果我们将我们的xx.py文件发给他,他是不能直接用的,他还需要安装python解释器,甚至还要安装我们用的那些第三方包,是不是有点小麻烦?但是我们都知道,PC是可以直接运行exe文件的,这就为我们提供了一个便捷的方式。发源码又要求对方有对应的解释器,一般是行不通的,所以我们要把源码打包成可执行的.exe文件,方便广大用户使用。
总结一句话:打成exe之后,分享即可用。
PyInstaller是一个十分有用的第三方库,它能够在Windows、Linux、 Mac OS X 等操作系统下将 Python 源文件打包,通过对源文件打包, Python 程序可以在没有安装 Python 的环境中运行,也可以作为一个 独立文件方便传递和管理。
1.首先安装pyinstaller
安装命令:pip install pyinstaller
2.保险起见,查看一下当前版本
安装成功后,就可以使用下面的命令了:
pyinstaller : 打包可执行文件的主要命令,详细用法下面会介绍。
pyi-archive_viewer : 查看可执行包里面的文件列表。
pyi-bindepend : 查看可执行文件依赖的动态库(.so或.dll文件)
pyi-… : 等等。
安装好pyinstaller之后,我们当然要做个案例来测试一下~
素材setup.py代码如下:
import tkinter as tk
import random
import threading
import time
def dow():
window = tk.Tk()
width=window.winfo_screenwidth()
height=window.winfo_screenheight()
a=random.randrange(0,width)
b=random.randrange(0,height)
window.title('520快乐')
window.geometry("200x50"+"+"+str(a)+"+"+str(b))
tk.Label(window,
text='520快乐!', # 标签的文字
bg='Red', # 背景颜色
font=('楷体', 17), # 字体和字体大小
width=15, height=2 # 标签长宽
).pack() # 固定窗口位置
window.mainloop()
threads = []
for i in range(100):#需要的弹框数量
t = threading.Thread(target=dow)
threads.append(t)
time.sleep(0.1)
threads[i].start()
注
1.这里的setup.py默认的图标是我设置的pycharm属性
2.你可以把上面的代码复制到记事本,重命名后缀.py
如果想要打包好的程序打包成自己想要的图标
就先准备一张图片放在文件夹中吧!
注意需要用.ico格式的图片才有效哦
我常用的在线转换工具
转换网站:https://convertio.co/zh/
转换演示
接着我们将代码所需要加载的文件资源【图片、.py、文档等】整合一下
放置在一个或多个文件夹下
如果你是用pycharm开发的代码,是多个文件夹的
打开命令行窗口,将路径改为脚本所在文件夹: cd 文件夹路径
下图命令:pyinstaller -F -w -i heart.ico setup.py
命令模板解释:pyinstaller -F -w -i [图片名].ico [脚本名].py
参数解释
-i: 表示要加载的图标(没有选择图标可以不用写)
heart.ico:表示自己选择的图标名(没有选择图标可以不用写)
-F:表示打包成.exe可执行文件
-c:表示打包程序有窗口
setup.py:表示你要打包的py文件
找到生成的dist文件夹,里面就能看见exe文件了!
我们应该新建一个文件,里面放入所有资源文件夹和exe文件
测试无误后压缩发给别人,别人解压后就可以使用了!
例子中我们将exe例子文件夹压缩发送就ok了
最后看看演示效果:
完整的项目下载:https://download.csdn.net/download/qq_43674360/85422561
PyInstaller原理简介
1.PyInstaller其实就是把python解析器和你自己的脚本打包成一个可执行的文件,和编译成真正的机器码完全是两回事,所以千万不要指望成打包成一个可执行文件会提高运行效率,相反可能会降低运行效率,好处就是在运行者的机器上不用安装python和你的脚本依赖的库。在Linux操作系统下,它主要用的binutil工具包里面的ldd和objdump命令。
2.PyInstaller输入你指定的的脚本,首先分析脚本所依赖的其他脚本,然后去查找,复制,把所有相关的脚本收集起来,包括Python解析器,然后把这些文件放在一个目录下,或者打包进一个可执行文件里面。
可以直接发布输出的整个文件夹里面的文件,或者生成的可执行文件。你只需要告诉用户,你的应用App是自我包含的,不需要安装其他包,或某个版本的Python,就可以直接运行了。
3. 需要注意的是,PyInstaller打包的执行文件,只能在和打包机器系统同样的环境下。也就是说,不具备可移植性,若需要在不同系统上运行,就必须针对该平台进行打包。