Files
auto_cursor/fix_setup.py
2025-04-02 10:45:19 +08:00

186 lines
6.5 KiB
Python
Raw 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.

#!/usr/bin/env python3
"""
Cursor自动化服务 - 修复脚本
添加虚拟环境支持并修复MySQL连接问题
"""
import os
import sys
import subprocess
import shutil
import time
# 彩色输出函数
class Colors:
GREEN = '\033[92m'
YELLOW = '\033[93m'
RED = '\033[91m'
BLUE = '\033[94m'
ENDC = '\033[0m'
BOLD = '\033[1m'
def print_success(msg):
print(f"{Colors.GREEN}{msg}{Colors.ENDC}")
def print_warning(msg):
print(f"{Colors.YELLOW}{msg}{Colors.ENDC}")
def print_error(msg):
print(f"{Colors.RED}{msg}{Colors.ENDC}")
def print_title(title):
print("\n" + "=" * 60)
print(f"{Colors.BOLD}{Colors.BLUE}{title.center(60)}{Colors.ENDC}")
print("=" * 60 + "\n")
def check_virtual_env():
"""检查是否在虚拟环境中运行"""
return hasattr(sys, 'real_prefix') or (hasattr(sys, 'base_prefix') and sys.base_prefix != sys.prefix)
def setup_virtual_env():
"""设置Python虚拟环境"""
print_title("虚拟环境设置")
if check_virtual_env():
print_success("当前已在虚拟环境中运行")
return True
print_warning("当前未在虚拟环境中运行")
create_venv = input("是否创建虚拟环境? (推荐) (y/n, 默认: y): ").strip().lower()
if create_venv == 'n':
print_warning("跳过虚拟环境创建")
return True
venv_path = input("请输入虚拟环境路径 (默认: ./venv): ").strip() or "./venv"
try:
# 创建虚拟环境
print(f"创建虚拟环境: {venv_path}")
subprocess.check_call([sys.executable, "-m", "venv", venv_path])
# 获取激活脚本路径
if sys.platform.startswith('win'):
activate_script = os.path.join(venv_path, "Scripts", "activate.bat")
python_exe = os.path.join(venv_path, "Scripts", "python.exe")
else:
activate_script = os.path.join(venv_path, "bin", "activate")
python_exe = os.path.join(venv_path, "bin", "python")
# 创建安装脚本
print("创建安装脚本...")
setup_script = "setup_venv.sh"
with open(setup_script, "w") as f:
if sys.platform.startswith('win'):
f.write(f"@echo off\n")
f.write(f"call {activate_script}\n")
f.write(f"pip install -r requirements.txt\n")
f.write(f"pip install cryptography\n")
f.write(f"python setup_environment.py\n")
f.write(f"pause\n")
else:
f.write(f"#!/bin/bash\n")
f.write(f"source {activate_script}\n")
f.write(f"pip install -r requirements.txt\n")
f.write(f"pip install cryptography\n")
f.write(f"python setup_environment.py\n")
if not sys.platform.startswith('win'):
os.chmod(setup_script, 0o755)
print_success(f"虚拟环境创建成功: {venv_path}")
print_success(f"安装脚本已创建: {setup_script}")
print("\n请运行以下命令完成安装:")
if sys.platform.startswith('win'):
print(f" {setup_script}")
else:
print(f" ./{setup_script}")
return False
except Exception as e:
print_error(f"创建虚拟环境失败: {str(e)}")
return True
def fix_mysql_format_issue():
"""修复MySQL格式化问题"""
print_title("修复MySQL连接问题")
if not os.path.exists("setup_environment.py"):
print_error("未找到setup_environment.py文件")
return False
backup_file = f"setup_environment.py.bak.{int(time.time())}"
try:
# 创建备份
shutil.copy2("setup_environment.py", backup_file)
print_success(f"已创建备份: {backup_file}")
# 读取文件内容
with open("setup_environment.py", "r", encoding="utf-8") as f:
content = f.read()
# 修复格式化问题
fixed_content = content
# 1. 添加cryptography到required_packages
if "cryptography" not in content:
fixed_content = fixed_content.replace(
'required_packages = [\n "loguru",\n "pymysql",\n "aiomysql",\n "redis",\n "pyyaml"',
'required_packages = [\n "loguru",\n "pymysql",\n "aiomysql",\n "redis",\n "pyyaml",\n "cryptography"'
)
print_success("已添加cryptography到依赖包列表")
# 2. 修复CREATE USER语句的格式化问题
if "cursor.execute(f\"CREATE USER '{db_user}'@'%'" in content:
fixed_content = fixed_content.replace(
"cursor.execute(f\"CREATE USER '{db_user}'@'%' IDENTIFIED BY %s\", (db_password,))",
"cursor.execute(\"CREATE USER %s@'%%' IDENTIFIED BY %s\", (db_user, db_password))"
)
print_success("已修复CREATE USER语句")
# 3. 修复ALTER USER语句的格式化问题
if "cursor.execute(f\"ALTER USER '{db_user}'@'%'" in content:
fixed_content = fixed_content.replace(
"cursor.execute(f\"ALTER USER '{db_user}'@'%' IDENTIFIED BY %s\", (db_password,))",
"cursor.execute(\"ALTER USER %s@'%%' IDENTIFIED BY %s\", (db_user, db_password))"
)
print_success("已修复ALTER USER语句")
# 写入修复后的内容
with open("setup_environment.py", "w", encoding="utf-8") as f:
f.write(fixed_content)
print_success("MySQL连接问题修复完成")
return True
except Exception as e:
print_error(f"修复过程出错: {str(e)}")
try:
if os.path.exists(backup_file):
shutil.copy2(backup_file, "setup_environment.py")
print_warning("已恢复原始文件")
except:
pass
return False
def main():
print_title("Cursor自动化服务 - 修复工具")
# 设置虚拟环境
if not setup_virtual_env():
# 如果创建了虚拟环境并生成了安装脚本,直接退出
sys.exit(0)
# 修复MySQL格式化问题
if not fix_mysql_format_issue():
print_error("修复失败请手动检查setup_environment.py文件")
sys.exit(1)
print_title("修复完成")
print("现在可以安全地运行设置向导:")
print(" python setup_environment.py")
if __name__ == "__main__":
try:
main()
except KeyboardInterrupt:
print("\n\n操作已取消")
sys.exit(1)