由于老被欺骗,在寻找打包工具时试了好多方法,都是博取流量一点用处没有,在我一气之下,自己搞一个打包工具,简洁方便,操作顺畅!
本文这个方式是可以直接把Py库都打包在一个exe里面,直接双击运行exe就可,发给任何人都可直接运行不需有Python环境!
import os
import sys
import subprocess
import tkinter as tk
from tkinter import filedialog
def pack_to_exe(py_file, output_path):
# 检查提供的文件是否存在
if not os.path.exists(py_file):
print(f"错误:文件 '{py_file}' 不存在。")
return
# 获取文件名和扩展名
filename, file_extension = os.path.splitext(py_file)
# 检查文件是否为Python文件
if file_extension.lower() != '.py':
print("错误:请提供一个带有 '.py' 扩展名的有效Python文件。")
return
# 确保自定义输出路径存在
os.makedirs(output_path, exist_ok=True)
# 设置输出文件的路径
output_filename = os.path.join(output_path, f"{filename}.exe")
# 使用PyInstaller创建可执行文件
try:
subprocess.run(['pyinstaller', '--onefile', '--distpath', output_path, '--specpath', output_path, py_file], check=True)
print("可执行文件创建成功!")
except subprocess.CalledProcessError:
print("在创建可执行文件时发生错误。")
return
def browse_file():
file_path = filedialog.askopenfilename(filetypes=[("Python files", "*.py")])
if file_path:
input_file_entry.delete(0, tk.END)
input_file_entry.insert(0, file_path)
def browse_folder():
folder_path = filedialog.askdirectory()
if folder_path:
output_folder_entry.delete(0, tk.END)
output_folder_entry.insert(0, folder_path)
def pack_button_clicked():
python_file = input_file_entry.get()
output_folder = output_folder_entry.get()
pack_to_exe(python_file, output_folder)
if __name__ == "__main__":
root = tk.Tk()
root.title("打包一键可执行exe文件")
tk.Label(root, text="选择要打包成exe文件的Python脚本:").pack(pady=5)
input_file_entry = tk.Entry(root, width=50)
input_file_entry.pack(pady=5)
tk.Button(root, text="浏览", command=browse_file).pack(pady=5)
tk.Label(root, text="选择保存exe文件的文件夹:").pack(pady=5)
output_folder_entry = tk.Entry(root, width=50)
output_folder_entry.pack(pady=5)
tk.Button(root, text="浏览", command=browse_folder).pack(pady=5)
tk.Button(root, text="打包为exe", command=pack_button_clicked).pack(pady=10)
root.mainloop()