AutoPercenty3/fix_dependencies.py

133 lines
4.1 KiB
Python
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# -*- coding: utf-8 -*-
"""
수동 의존성 수정 도구 - 관리자 권한으로 실행하여 의존성 문제를 해결합니다.
"""
import subprocess
import sys
import os
# 호환성을 위한 고정 버전
REQUIRED_VERSIONS = {
'numpy': '1.26.4',
'scipy': '1.11.4',
'onnxruntime': '1.18.1',
'opencv-python': '4.8.1.78',
}
def is_admin():
"""관리자 권한으로 실행 중인지 확인합니다."""
try:
return os.getuid() == 0
except AttributeError:
# Windows
try:
import ctypes
return ctypes.windll.shell32.IsUserAnAdmin()
except:
return False
def run_as_admin():
"""관리자 권한으로 재실행합니다."""
try:
if sys.platform == 'win32':
import ctypes
ctypes.windll.shell32.ShellExecuteW(
None, "runas", sys.executable, f'"{__file__}"', None, 1
)
else:
os.execvp('sudo', ['sudo', sys.executable] + sys.argv)
except Exception as e:
print(f"관리자 권한 실행 실패: {e}")
return False
return True
def force_reinstall_package(package_name, version):
"""패키지를 강제로 재설치합니다."""
try:
package_spec = f"{package_name}=={version}"
print(f"\n🔄 {package_spec} 강제 재설치 중...")
# 1단계: 완전 제거
print(f"1{package_name} 완전 제거 중...")
uninstall_cmd = [
sys.executable, '-m', 'pip', 'uninstall', '-y', package_name
]
subprocess.run(uninstall_cmd, check=False)
# 2단계: 캐시 정리
print("2⃣ pip 캐시 정리 중...")
cache_cmd = [sys.executable, '-m', 'pip', 'cache', 'purge']
subprocess.run(cache_cmd, check=False)
# 3단계: 강제 재설치
print(f"3{package_spec} 설치 중...")
install_cmd = [
sys.executable, '-m', 'pip', 'install',
'--force-reinstall', '--no-cache-dir', package_spec
]
result = subprocess.run(install_cmd, capture_output=True, text=True)
if result.returncode == 0:
print(f"{package_spec} 설치 완료!")
return True
else:
print(f"{package_spec} 설치 실패:")
print(result.stderr)
return False
except Exception as e:
print(f"💥 {package_name} 처리 중 오류: {e}")
return False
def main():
"""메인 함수"""
print("🔧 의존성 수동 수정 도구")
print("=" * 50)
# 관리자 권한 확인
if not is_admin():
print("⚠️ 관리자 권한이 필요합니다.")
print("관리자 권한으로 재실행 중...")
if run_as_admin():
return 0
else:
print("❌ 관리자 권한 실행 실패")
return 1
print("✅ 관리자 권한으로 실행 중")
success_count = 0
total_count = len(REQUIRED_VERSIONS)
for package_name, required_version in REQUIRED_VERSIONS.items():
print(f"\n{'='*20} {package_name} {'='*20}")
if force_reinstall_package(package_name, required_version):
success_count += 1
else:
print(f"⚠️ {package_name} 처리 실패")
print(f"\n{'='*50}")
print(f"📊 결과: {success_count}/{total_count} 패키지 처리 완료")
if success_count == total_count:
print("🎉 모든 의존성이 성공적으로 설치되었습니다!")
return 0
else:
print("⚠️ 일부 패키지 설치에 실패했습니다.")
return 1
if __name__ == "__main__":
try:
exit_code = main()
input("\n아무 키나 눌러 종료하세요...")
sys.exit(exit_code)
except KeyboardInterrupt:
print("\n⚠️ 사용자에 의해 중단됨")
sys.exit(1)
except Exception as e:
print(f"\n💥 예상치 못한 오류: {e}")
input("아무 키나 눌러 종료하세요...")
sys.exit(1)