first commit

This commit is contained in:
huangzhenpc
2025-03-11 15:52:54 +08:00
commit 89c5fd4cf9
34 changed files with 40149 additions and 0 deletions

150
package.py Normal file
View File

@@ -0,0 +1,150 @@
import os
import sys
import shutil
import subprocess
import platform
import datetime
import argparse
import time
import traceback
def check_pyinstaller():
"""检查是否已安装 PyInstaller如果没有则安装"""
try:
subprocess.run(["pyinstaller", "--version"], stdout=subprocess.PIPE, stderr=subprocess.PIPE, check=True)
print("✅ PyInstaller 已安装")
return True
except (subprocess.SubprocessError, FileNotFoundError):
print("❌ PyInstaller 未安装,正在安装...")
try:
subprocess.run([sys.executable, "-m", "pip", "install", "pyinstaller"], check=True)
print("✅ PyInstaller 安装成功")
return True
except subprocess.SubprocessError as e:
print(f"❌ PyInstaller 安装失败: {e}")
return False
def create_executable(app_name, keep_previous):
"""使用 PyInstaller 创建可执行文件"""
print(f"开始打包 cursor_pro_register.py 为 {app_name}...")
dist_folder = "dist"
build_folder = "build"
# 如果不保留旧版本则清除dist和build目录
if not keep_previous:
for folder in [dist_folder, build_folder]:
if os.path.exists(folder):
shutil.rmtree(folder)
print(f"已清理 {folder} 文件夹")
else:
# 确保目录存在
os.makedirs(dist_folder, exist_ok=True)
os.makedirs(build_folder, exist_ok=True)
print("将保留先前版本")
# 生成版本标识(用于区分构建文件夹)
timestamp = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
build_dir = os.path.join(build_folder, f"build_{timestamp}")
# 检查是否存在 spec 文件并删除
if os.path.exists("cursor_pro_register.spec"):
os.remove("cursor_pro_register.spec")
print("已删除旧的 spec 文件")
# 确定输出文件名
output_name = app_name if app_name else "cursor动态账号注册机"
print(f"输出文件名设置为: {output_name}")
# 构建命令
cmd = [
"pyinstaller",
"--onefile", # 创建单个可执行文件
"--name", output_name,
"--clean", # 清理临时文件
"--workpath", build_dir, # 使用唯一的构建目录
# 移除noconsole选项使用控制台模式
"--noupx", # 不使用UPX压缩提高兼容性
"--add-data", f"turnstilePatch{os.pathsep}turnstilePatch", # 添加额外文件
"cursor_pro_register.py"
]
# 过滤空字符串
cmd = [item for item in cmd if item]
print(f"执行命令: {' '.join(cmd)}")
try:
# 运行 PyInstaller
subprocess.run(cmd, check=True)
executable_name = f"{output_name}.exe" if platform.system() == "Windows" else output_name
executable_path = os.path.join("dist", executable_name)
if os.path.exists(executable_path):
print(f"\n✅ 打包成功! 可执行文件位于: {executable_path}")
# 获取文件大小
size_bytes = os.path.getsize(executable_path)
size_mb = size_bytes / (1024 * 1024)
print(f"可执行文件大小: {size_mb:.2f} MB")
return True
else:
print(f"❌ 打包过程可能出错,找不到可执行文件: {executable_path}")
return False
except subprocess.SubprocessError as e:
print(f"❌ 打包失败: {e}")
traceback.print_exc() # 打印详细的错误信息
return False
if __name__ == "__main__":
print("=" * 50)
print("Cursor Pro Register 打包工具")
print("=" * 50)
# 解析命令行参数
parser = argparse.ArgumentParser(description="Cursor Pro Register 打包工具")
parser.add_argument("app_name", nargs="?", default="cursor动态账号注册机", help="应用名称")
parser.add_argument("keep_previous", nargs="?", type=int, default=0, help="是否保留先前版本 (1=是, 0=否)")
try:
args = parser.parse_args()
print(f"接收到的参数: 应用名称=\"{args.app_name}\", 保留旧版本={bool(args.keep_previous)}")
# 检查当前目录是否有 cursor_pro_register.py
if not os.path.exists("cursor_pro_register.py"):
print("❌ 当前目录找不到 cursor_pro_register.py 文件!")
sys.exit(1)
# 检查是否有 turnstilePatch 目录
if not os.path.exists("turnstilePatch"):
print("⚠️ 警告: 找不到 turnstilePatch 目录,打包可能会缺少必要文件")
try:
choice = input("是否继续打包? (y/n): ")
if choice.lower() != 'y':
print("打包已取消")
sys.exit(0)
except Exception:
# 如果input()出错,默认继续
print("⚠️ 无法获取用户输入,默认继续打包...")
# 检查并安装 PyInstaller
if not check_pyinstaller():
print("❌ 无法安装 PyInstaller打包终止")
sys.exit(1)
# 创建可执行文件
if create_executable(args.app_name, bool(args.keep_previous)):
print("\n打包过程完成!")
else:
print("\n打包过程出现错误,请检查上面的日志信息")
except Exception as e:
print(f"❌ 执行过程中出现未预期的错误: {e}")
traceback.print_exc()
print("程序将在5秒后自动退出...")
time.sleep(5)