前言
版权声明:本文为本博主在CSDN的原创文章搬运而来,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文首发链接:https://blog.csdn.net/weixin_72543266/article/details/132265386
在写代码的过程中我们常常会遇到问题,在与他人分享自己编写的Python程序时,却面临一个问题:如何让没有安装Python环境的用户也能轻松运行程序呢?,今天我要给大家介绍一种非常方便的方法,可以将Python文件打包成可执行的exe文件。你不用担心用户是否安装了Python环境,只需要一个点击,你的程序就能在任何Windows电脑上运行了!,当然在进行文件打包时,我们总会遇到很多问题,例如某模块未打包进入文件,导致exe文件无法使用,接下来,我会一点一点进行解决
此工具我会出一个专栏,这是工具1.0版本的,只能打包,只包含基础库的py文件,后续会一步步优化,包含自定义打包文件的小图标,文件名,将音乐或其他第三方库模块进行打包。注意,最终为一个GUI工具
一,pyinstaller库的安装
我们需要用到一个名为pyinstaller
的库。它是一个非常流行的Python库,可以将Python文件转换为可执行文件。如果你还没有安装它,可以在命令行中使用以下命令进行安装:
代码入下:
pip install pyinstaller
二,导入所需的库
这里我将导入的库的作用使用注释写出
import tkinter as tk # 导入tkinter库作为tk的别名。用于创建GUI界面和处理用户交互。 from tkinter import filedialog, messagebox # 导入tkinter库中的filedialog和messagebox模块。用于打开文件对话框和显示消息框。 from PIL import ImageTk, Image # 导入PIL库中的ImageTk和Image模块。用于加载、显示和处理图像。 import subprocess # 导入subprocess库。用于执行外部命令 import os # 导入os库,用于处理操作系统相关的功能,对文件的操作。
三,主函数
要想制作一个界面GUI应用,首先从一个创建一个窗口开始。
1.创建窗口
我们首先创建一个主窗口,并设置窗口的标题和尺寸。
代码入下:
def main(): # 创建主窗口 window = tk.Tk() window.title("作者--内心如初") # 设置窗口尺寸 window.geometry("500x300")
2.创建背景图片
窗口创建好后。接下来,,当然因人而异,光秃秃的界面,强迫证的我难以接受!
我们需要加载一张背景图片,并将其设置为窗口的背景。你可以替换图片路径以获得你喜欢的背景效果
代码入下:
# 加载背景图片 image_path = 'C:\\Users\\86199\\Desktop\\假期学习\\python库学习\\python打包软件项目\\软件背 景.png' # 替换为你的背景图片路径,这里我使用的是绝对路径 image = Image.open(image_path) # 将图片使用open函数打开,当然也可以将图片路径直接写入括号 background_image = ImageTk.PhotoImage(image) # 将image参数传入 # 创建背景图片的标签并添加到窗口 background_label = tk.Label(window, image=background_image) # 设置背景图片标签的位置和尺寸,使其铺满整个窗口 background_label.place(x=0, y=0, relwidth=1, relheight=1)
3.创建转化按钮
增加图片背景后,我们需要创建两个按钮。一个用于选择要打包的Python文件,另一个用于执行转换为exe文件的操作。
代码入下:
# 创建选择文件按钮 select_button = tk.Button(window, text="选择要打包的文件", command=select_file) # 创建了一个按钮 select_button,按钮上显示文本为 “选择要打包的文件”,并绑定了一个命令 # select_file,即当按钮被点击时会执行 select_file 函数。 select_button.pack(pady=20) # select_button 使用了 pack 方法来将按钮放置在窗口中,并设置 pady 参数来增加垂直间距。 # 通俗来说就是两个按钮之间的垂直距离 # 创建转为exe按钮 exe_button = tk.Button(window, text="转为exe文件", command=convert_to_exe) # 创建了一个按钮 exe_button,按钮上显示文本为 “转为exe文件”,并绑定了一个命令 # convert_to_exe,即当按钮被点击时会执行 convert_to_exe 函数。 exe_button.pack(pady=10) # 这个和上面一样,我就不多说了 # 启动主循环 window.mainloop() # 启动了窗口的主事件循环,使窗口能够响应用户的交互操作。窗口会一直运行,直到关闭窗口。 # 上述绑定的命令,其实为两个函数,会在后面进行讲解
四,select_file()函数
我们需要定义一些功能函数。首先是select_file()函数,用于弹出文件选择对话框并保存选择的文件路径。
代码入下:
def select_file(): # 弹出文件选择对话框 file_path = filedialog.askopenfilename(filetypes=[("Python Files", "*.py")]) # filedialog.askopenfilename 是一个弹出文件选择对话框的函数,它可以让用户选择一个文件。 # filetypes 参数是一个列表,用于指定允许选择的文件类型,这里设置为仅允许选择扩展名为 .py 的文件。 if file_path: # 保存选择的文件路径 global selected_file selected_file = file_path # 如果 file_path 不为空,即用户选择了一个文件,则将选择的文件路径保存到全局变量 # selected_file 中。使用 global 关键字声明 selected_file 为全局变量,使其在全局使用 # 提示选择完成 file_name = os.path.basename(file_path) messagebox.showinfo("提示", f"已选择文件:{file_name}") # 使用 os.path.basename 获取选择文件的文件名 # 使用 messagebox.showinfo 弹出一个信息对话框,显示选择的文件名。 # 使用字符串字面值 “提示” 作为对话框标题,使用 f-string 将文件名插入到对话框的消息文本中。
五,convert_to_exe()函数
代码入下:
def convert_to_exe(): try: # 检查是否选择了文件 if not selected_file: messagebox.showwarning("警告", "请先选择要打包的文件!") return # 检查了一个名为 selected_file 的全局变量是否为空。 # 如果没有选择文件(selected_file 为空),则弹出一个警告框,显示提示消息 “请先选择要打包的文 件!”。 # 返回语句会终止函数的执行。 # 执行转换为exe文件命令 pyinstaller_command = f"pyinstaller --onefile {selected_file}" # 存储打包的外部命令 subprocess.call(pyinstaller_command, shell=True) # 使用 subprocess.call 函数来执行转换为 .exe 文件的命令。在这里,我们使用了 pyinstaller 命 令行工具来进行转换。 # --onefile 参数表示将应用程序打包成一个独立的 .exe 文件。 # selected_file 包含我们选择的要打包的 Python 文件的路径 # 提示转换完成 file_name = os.path.basename(selected_file) messagebox.showinfo("提示", f"{file_name} 已转换为exe文件!") # os.path.basename 函数用于获取选择文件的文件名。 # 用于在转换完成后,弹出一个提示消息框,显示文件已经成功转换为 .exe 文件的提示消息。 except Exception as e: # 异常处理 messagebox.showerror("错误", str(e)) # 在 try 块中,我们使用了 Exception 作为通用的异常处理器,捕获可能出现的任何异常。 # 如果出现异常,将会显示一个错误对话框,显示异常的消息。
六,运行程序
在主程序的末尾,我们需要添加这两行代码来初始化全局变量selected_file,并调用main()函数。
代码入下:
if __name__ == "__main__": # 全局变量 selected_file = None main()
七,完整代码
代码入下:
import tkinter as tk from tkinter import filedialog, messagebox from PIL import ImageTk, Image import subprocess import os def main(): # 创建主窗口 window = tk.Tk() window.title("作者--内心如初") # 设置窗口尺寸 window.geometry("500x300") # 加载背景图片 image_path = 'C:\\Users\\86199\\Desktop\\假期学习\\python库学习\\python打包软件项目\\软件背景.png' # 替换为你的背景图片路径 image = Image.open(image_path) background_image = ImageTk.PhotoImage(image) # 创建背景图片的标签并添加到窗口 background_label = tk.Label(window, image=background_image) background_label.place(x=0, y=0, relwidth=1, relheight=1) # 创建选择文件按钮 select_button = tk.Button(window, text="选择要打包的文件", command=select_file) select_button.pack(pady=20) # 创建转为exe按钮 exe_button = tk.Button(window, text="转为exe文件", command=convert_to_exe) exe_button.pack(pady=10) # 启动主循环 window.mainloop() def select_file(): # 弹出文件选择对话框 file_path = filedialog.askopenfilename(filetypes=[("Python Files", "*.py")]) if file_path: # 保存选择的文件路径 global selected_file selected_file = file_path # 提示选择完成 file_name = os.path.basename(file_path) messagebox.showinfo("提示", f"已选择文件:{file_name}") def convert_to_exe(): try: # 检查是否选择了文件 if not selected_file: messagebox.showwarning("警告", "请先选择要打包的文件!") return # 执行转换为exe文件命令 pyinstaller_command = f"pyinstaller --onefile {selected_file}" subprocess.call(pyinstaller_command, shell=True) # 提示转换完成 file_name = os.path.basename(selected_file) messagebox.showinfo("提示", f"{file_name} 已转换为exe文件!") except Exception as e: # 异常处理 messagebox.showerror("错误", str(e)) if __name__ == "__main__": # 全局变量 selected_file = None main()
八,注意事项
选择py文件后,点击转为exe,等待转化完后会有提示,当然和文件大小有关,打包速度也会变化,目前只能打包基础库的部分,包含部分库可以直接打包。
后续,我会一点一点制作可以解决打包中出现的各种问题的工具。
九,打包实现(不要走开这部分有我制作的三个有用的工具)
注意这里的工具都为调用免费的api接口返回的数据,会出现请求频繁的情况,注意使用频率,正常使用是OK的
1.返回随机壁纸
图片是将上述工具中返回的链接,在浏览器最上面的填写url的地方输入后会显示图片
2.百度翻译脚本
3.随机一言
十.总结
对与本次工具的实现,其实说多了就是为了偷懒,不然也不会做这个,当我看到,其他人制作的工具都需要收费下载时,我的内心是抵触的,所以我就自制了。相信在我的完善下,这个工具的使用会更好的满足大家的需求,当然也包括我。