将程序打包可以使得所有Windows带有python虚拟机的电脑进行使用,打包的内容有代码加外部资源(如logo图片等)
步骤:
1)创建程序的代码
2)生成配置文件——用于获得打包的资源,将资源保存在运行程序的电脑的临时文件中,这里临时文件是resources文件夹
3)修改python源代码:因为此时的程序的资源目录resources不一定在当前项目的目录下,而是在打包后再次运行时一定要将资源解压缩到临时文件当中
4)创建配置文件:因为程序打包需要引用资源文件,因此必须手工地对资源的路径进行定义,就需要根据打包程序生成一个.spec配置文件,
pyi-makespec -F *.py给定要打包的程序
5)编辑spc文件,定义我们需要使用资源路径打开.spec文件——找到datas=[],项,修改为data = [("resources","resources")]里面放的是一个元组
6)程序打包:pyinstaller -F *.spec
7)若没有则使用pyinstaller -F *.py,
8)打包结束后就会有*.exe文件了
'''将程序打包可以使得所有Windows带有python虚拟机的电脑进行使用,打包的内容有代码加外部资源(如logo图片等)步骤:
1)创建程序的代码
2)生成配置文件——用于获得打包的资源,将资源保存在运行程序的电脑的临时文件中,这里临时文件是resources文件夹
3)修改python源代码:因为此时的程序的资源目录resources不一定在当前项目的目录下,而是在打包后再次运行时一定要将资源解压缩到临时文件当中
4)创建配置文件:因为程序打包需要引用资源文件,因此必须手工地对资源的路径进行定义,就需要根据打包程序生成一个.spec配置文件,
pyi-makespec -F *.py给定要打包的程序
5)编辑spc文件,定义我们需要使用资源路径打开.spec文件——找到datas=[],项,修改为data = [("resources","resources")]里面放的是一个元组
6)程序打包:pyinstaller -F *.spec
7)若没有则使用pyinstaller -F *.py,
8)打包结束后就会有*.exe文件了
'''import tkinter,os#导入创建窗体的相关模块
import sys#导入与操作系统交互的模块def get_resource_path(relative_path):#利用此函数实现资源路径的定位if getattr(sys,"frozen",False):base_path = sys._MEIPASSelse:base_path = os.path.abspath(".")#获得当前目录路径return os.path.join(base_path,relative_path)#获得绝对路径# image_path = image_path = r'C:\Users\jinlin\Desktop\python_further_study\GUI编程\resources' + os.sep + 'linlianqin.gif'#只支持gif格式的图片'''
下面这个语句提示无法找到路径提示错误,这里特别需要注意:
1)修改代码后需要重新按照以上步骤进行,尤其不能忘记了修改配置文件的datas
2)必须得先pyi-makespec -F *.py指定要打包的程序,再修改配置文件,再pyinstaller -F *.spec程序打包
'''print(get_resource_path(os.path.join("resources","linlianqin.gif")))
image_path = get_resource_path(os.path.join("resources","linlianqin.gif"))#修改图片的路径,从上面定义的资源路径中获取图,get_resource_path(os.path.join("临时资源文件夹","图片名称"))class Mainwindow():#创建窗口类def __init__(self):root = tkinter.Tk() # 创建主体窗口root.title('linlianqin') # 定义窗体的名字root.geometry('500x500') # 定义窗体的初始大小root.maxsize(1200, 1200) # 设置窗口可以显示的最大尺寸#---------------以下是对按钮的设置---------------photo = tkinter.PhotoImage(file = image_path)#设置按钮的外观,这里是将图片设置为按钮的外观button = tkinter.Button(root,text = 'linlianqin',image = photo,compound = 'bottom')#创建按钮button.pack()#显示按钮root.mainloop()#显示窗口if __name__ == '__main__':Mainwindow()#将窗体类实例化