文章目录
- 懒人教程:从Python到exe让你的程序一键“变身”
- 前言
- 一,pyinstaller库的安装
- 二,导入所需的库
- 三,主函数
- 1.创建窗口
- 2.创建背景图片
- 3.创建转化按钮
- 四,select_file()函数
- 五,convert_to_exe()函数
- 六,运行程序
- 七,完整代码
- 八,注意事项
- 九,打包实现(不要走开这部分有我制作的三个有用的工具)
- 1.返回随机壁纸
- 2.百度翻译脚本
- 3.随机一言
- 十.总结
前言
在写代码的过程中我们常常会遇到问题,在与他人分享自己编写的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.随机一言
十.总结
对与本次工具的实现,其实说多了就是为了偷懒,不然也不会做这个,当我看到,其他人制作的工具都需要收费下载时,我的内心是抵触的,所以我就自制了。相信在我的完善下,这个工具的使用会更好的满足大家的需求,当然也包括我。