怎么将 Python 项目打包成 exe?

宅哥聊构架 后端 2024-07-04

怎么将 Python 项目打包成 exe?

环境

Python 3.8

Tkinter (自带)

pyinstaller 6.3.0

Inno Setup Compiler

基本流程

用 conda 单独创建一虚拟环境,比如写一个 tkinter 应用,对了为了好看,我们可以设置以下 icon,尺寸 32x32,大图标 64x64 准备一下即可。然后用 pyinstaller 将应用打成文件包 (含 exe),最后用 Inno Setup Compiler 打成安装包,里面就是各种文件关联,图标和信息的设置了。

怎么将 Python 项目打包成 exe?

开始操作

环境创建ini

复制代码
# 1. 创建环境 conda create -n tools_env python=3.8 # 2. 进入环境 conda activate tools_env # 3. 安装 pyinstaller pip install pyinstaller -i https://pypi.tuna.tsinghua.edu.cn/simple

编码示例python

复制代码
import tkinter as tk from tkinter import ttk from tkinter import messagebox from ToolTip import ToolTip import os import time class Application(tk.Tk): def __init__(self): super().__init__() self.title("公众号:ZERO开发") self.iconbitmap('logo.ico') self.geometry("600x370") # 设置固定的窗口大小 self.resizable(False, False) # 禁止调整窗口大小 self.style = ttk.Style(self) self.main_color = self.cget("bg") self.style.configure("TEntry", padding=6, relief="flat", background="#0078d7", foreground="black", font=("Arial", 12, "bold")) self.style.configure("TLabel", font=("Arial", 12, "bold")) self.style.configure("TButton", padding=6, font=("Arial", 12)) self.create_widgets() def create_widgets(self): self.path_label = ttk.Label(self, text='绝对路径:') self.path_label.grid(row=0, sticky=tk.W, pady=30, padx=20) self.path = tk.StringVar() self.path_entry = ttk.Entry(self, width=60, textvariable=self.path) self.path_entry.grid(row=0, column=1, sticky=tk.E, pady=5) ToolTip(self.path_entry, "电脑里的目录路径,如 D:\3code\6pytorch\pytorch_ai_demo") self.rename_label = ttk.Label(self, text='修改名称:') self.rename_label.grid(row=1, sticky=tk.W, pady=5, padx=20) self.rename = tk.StringVar() self.rename_entry = ttk.Entry(self, width=60, textvariable=self.rename) self.rename_entry.grid(row=1, column=1, sticky=tk.E, pady=5) self.msg_text = tk.Text(self, height=2, width=60, wrap='none') # 添加一个列表框来显示文件名 self.msg_text.grid(row=2, column=1, sticky=tk.W, pady=15) self.msg_text.configure(bd=0, relief="solid", bg=self.main_color) # self.msg_text.insert(tk.END, "这是要显示的文本。") ttk.Button(self, text='确认修改', command=self.start_program).grid(row=3, column=1, sticky=tk.W, pady=20, padx=120) ttk.Button(self, text='关于作者', command=self.about).grid(row=4, column=1, sticky=tk.W, padx=120) def start_program(self): print("绝对路径:{}, 重命名:{}". format(self.path.get(), self.rename.get())) path = self.path.get() rename = self.rename.get() if path == "" or rename == "": messagebox.showwarning("警告", "输入框不能为空!") return if os.path.isdir(path) == False: messagebox.showwarning("警告", "绝对路径不正确!") return i = 0 # '该文件夹下所有的文件(包括文件夹)' FileList = os.listdir(path) # '遍历所有文件' for files in FileList: oldDirPath = os.path.join(path, files) self.msg_text.delete(1.0, tk.END) self.msg_text.insert(tk.END, oldDirPath) # '如果是文件夹则递归调用' if os.path.isdir(oldDirPath): self.start_program(oldDirPath) # '文件名' fileName = os.path.splitext(files)[0] # '文件扩展名' fileType = os.path.splitext(files)[1] fileType = fileType.lower() newDirPath = os.path.join(path, rename + "_" + str(i) + fileType) # '重命名' os.rename(oldDirPath, newDirPath) i += 1 messagebox.showinfo("信息", "操作完成!") def about(self): messagebox.showinfo("关于", "微信公众号:ZERO开发\r\n\r\n工具:批量修改文件1.0") def quit_program(self): self.destroy() if __name__ == "__main__": app = Application() app.mainloop()

开始打包ini

复制代码
pyinstaller -F -w Application.py -–icon=logo.ico

怎么将 Python 项目打包成 exe?

这里我们希望打包是自己的图标就带上 icon,而且打开时不要出现黑色闪框就带上 w,当然后面打开 exe 要把 icon 放到与他同一级的目录中,尺寸上面已经说了,下面是参数说明。diff

复制代码
参数说明: -–icon=图标路径 -F 打包成一个exe文件 -w 使用窗口,无控制台 -c 使用控制台,无窗口 -D 创建一个目录,里面包含exe以及其他一些依赖性文件

还有一个问题是,如果是修改了代码,需要反复多次打包,可以把项目前一次打包生成的生成的 spec 后缀文件删除即可。打包成功后,控制面包会显示 Building EXE from EXE-00.toc completed successfully,然后根目录的 dist 就是打包后的文件包,里面需要的文件图片等都在里面,后面用 Inno Setup Compiler 也就是对这个文件夹打包。

怎么将 Python 项目打包成 exe?

怎么将 Python 项目打包成 exe?

Inno Setup Compiler 操作

新建脚本,填写信息

怎么将 Python 项目打包成 exe?

选择主程序和需要的文件

怎么将 Python 项目打包成 exe?

设置名称和 icon

怎么将 Python 项目打包成 exe?

选择导出位置 (前面还有协议等设置)

怎么将 Python 项目打包成 exe?

运行脚本开始生成

怎么将 Python 项目打包成 exe?

安装打开,安装目录里有自带卸载程序

怎么将 Python 项目打包成 exe?

转载来源:https://juejin.cn/post/7314196310647586879

Apipost 私有化火热进行中

评论