将Py转为exe文件

简介: 今天我要给大家介绍一种非常方便的方法,可以将Python文件打包成可执行的exe文件。你不用担心用户是否安装了Python环境,只需要一个点击,你的程序就能在任何Windows电脑上运行了!,当然在进行文件打包时,我们总会遇到很多问题,例如某模块未打包进入文件,导致exe文件无法使用,接下来,我会一点一点进行解决.此工具我会出一个专栏,这是工具1.0版本的,只能打包,只包含基础库的py文件,后续会一步步优化,包含自定义打包文件的小图标,文件名,将音乐或其他第三方库模块进行打包。注意,最终为一个GUI工具

前言

版权声明:本文为本博主在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.随机一言

十.总结

 对与本次工具的实现,其实说多了就是为了偷懒,不然也不会做这个,当我看到,其他人制作的工具都需要收费下载时,我的内心是抵触的,所以我就自制了。相信在我的完善下,这个工具的使用会更好的满足大家的需求,当然也包括我。


相关文章
|
存储 搜索推荐 人机交互
Qt鼠标事件全面解析:从基础到实战
Qt鼠标事件全面解析:从基础到实战
2316 0
|
缓存 负载均衡 算法
“软件系统三高问题”高并发、高性能、高可用系统设计经验
​ 总的来说解决三高问题核心就是 “分字诀” 业务分层、系统分级、服务分布、数据库分库/表、动静分离、同步拆分成异步、单线程分解成多线程、原数据缓存分离、分流等等。。。。 直观的表述就是:从前端用的CDN、动静分离,到后台服务拆分成微服务、分布式、负载均衡、缓存、池化、多线程、IO、分库表、搜索引擎等等。都是强调一个“分”字。
4080 0
“软件系统三高问题”高并发、高性能、高可用系统设计经验
|
IDE Linux 数据处理
探索Linux中的`pydoc`命令:Python文档生成器的力量
`pydoc`是Linux上Python的文档生成和查看工具,尤其对数据科学家有价值。它从docstring生成模块、函数和类的文档,提供快速API参考。主要特点包括易用性、支持标准库和第三方库、跨平台。命令行示例:`pydoc pandas` 查看库文档,`pydoc numpy.array` 查看类详情,`pydoc -k 关键字` 进行搜索。使用时注意正确安装Python,编写清晰的docstring,并结合IDE以提升效率。
|
9月前
|
数据采集 存储 API
利用Python爬虫获取1688关键词接口全攻略
本文介绍如何使用Python爬虫技术合法合规地获取1688关键词接口数据,包括环境准备、注册1688开发者账号、获取Access Token、构建请求URL、发送API请求、解析HTML及数据处理存储等步骤,强调遵守法律法规和合理使用爬虫技术的重要性。
|
搜索推荐 区块链 开发者
【python程序打包教程】PyInstaller一键打包Python程序为独立可执行exe文件
【python程序打包教程】PyInstaller一键打包Python程序为独立可执行exe文件
Pyside6-第九篇-QTextEdit多行文本编辑器
Pyside6-第九篇-QTextEdit多行文本编辑器
712 0
|
Web App开发 Go PHP
BUUCTF---[极客大挑战 2019]Http1
BUUCTF---[极客大挑战 2019]Http1
|
C++ Python Windows
用 Pyinstaller 模块将 Python 程序打包成 exe 文件(全网最全面最详细)(一)
用 Pyinstaller 模块将 Python 程序打包成 exe 文件(全网最全面最详细)(一)
763 0
|
IDE 开发工具 Python
10分钟教你用Python实现微信自动回复
10分钟教你用Python实现微信自动回复
3370 0
10分钟教你用Python实现微信自动回复