Files
proxy_cursor_regv206/package.py
huangzhenpc 89c5fd4cf9 first commit
2025-03-11 15:52:54 +08:00

150 lines
5.6 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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)