File size: 5,012 Bytes
e275025 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 | #!/usr/bin/env python3
"""
Build script for Medical Transcription GUI Application
Скрипт для сборки Windows .exe файла с использованием uv
"""
import os
import sys
import subprocess
from pathlib import Path
import shutil
def build_exe():
"""Собрать Windows .exe файл"""
print("=" * 60)
print("Medical Transcription GUI - Windows Build (with uv)")
print("=" * 60)
root_dir = Path(__file__).parent.absolute()
# Проверить наличие uv
try:
result = subprocess.run(['uv', '--version'], capture_output=True, text=True)
if result.returncode == 0:
print(f"\n✓ uv найден: {result.stdout.strip()}")
else:
print("\n❌ uv не установлен или недоступен!")
print("Установите uv: pip install uv")
return False
except FileNotFoundError:
print("\n❌ uv не найден в PATH!")
print("Установите uv: pip install uv")
return False
# Проверить наличие PyInstaller
print("\n📦 Проверка PyInstaller...")
try:
result = subprocess.run(['uv', 'pip', 'list'], capture_output=True, text=True)
if 'pyinstaller' in result.stdout.lower():
print("✓ PyInstaller установлен")
else:
print("⚠️ PyInstaller не установлен, установим его...")
subprocess.run(['uv', 'pip', 'install', 'pyinstaller>=6.0.0'])
except Exception as e:
print(f"⚠️ Не смогли проверить PyInstaller: {e}")
# Проверить наличие необходимых файлов
required_files = [
'run_gui.py',
'build_windows.spec',
'medical_terms.txt',
'app/gui_app.py',
'pipeline/medical_pipeline.py',
'corrector/report_generator.py',
]
print("\n📋 Проверка необходимых файлов:")
for file in required_files:
file_path = root_dir / file
if file_path.exists():
print(f" ✓ {file}")
else:
print(f" ❌ {file} - НЕ НАЙДЕН!")
return False
# Очистить старые сборки
print("\n🧹 Очистка старых сборок...")
for folder in ['dist', 'build', '__pycache__']:
folder_path = root_dir / folder
if folder_path.exists():
shutil.rmtree(folder_path)
print(f" Удалена папка: {folder}")
# Запустить PyInstaller через uv
print("\n🔨 Сборка приложения с PyInstaller...")
spec_file = root_dir / 'build_windows.spec'
cmd = [
'uv',
'run',
'--',
'pyinstaller',
'--onefile',
'--windowed',
'--name=MedicalTranscriber',
str(spec_file)
]
print(f"Команда: {' '.join(cmd)}\n")
try:
result = subprocess.run(cmd, cwd=str(root_dir), capture_output=False, text=True)
if result.returncode != 0:
print(f"\n❌ Ошибка при сборке с кодом {result.returncode}")
return False
except Exception as e:
print(f"\n❌ Ошибка при запуске PyInstaller: {e}")
return False
# Проверить результат
exe_path = root_dir / 'dist' / 'MedicalTranscriber.exe'
if exe_path.exists():
size_mb = exe_path.stat().st_size / (1024 * 1024)
print(f"\n✅ Сборка успешна!")
print(f"📦 {exe_path.name} ({size_mb:.1f} МБ)")
print(f"📍 Расположение: {exe_path.parent}")
return True
else:
print(f"\n⚠️ Файл .exe не найден в {exe_path.parent}")
print("Проверьте наличие dist/ папки и наличие ошибок выше")
return False
def main():
"""Главная функция"""
success = build_exe()
if success:
print("\n" + "=" * 60)
print("🎉 Приложение успешно собрано!")
print("=" * 60)
print("\nДля запуска приложения:")
print(" dist\\MedicalTranscriber.exe")
print("\nИли двойной клик на файл в проводнике Windows")
return 0
else:
print("\n" + "=" * 60)
print("❌ Сборка не удалась")
print("=" * 60)
print("\nДля отладки:")
print(" 1. Убедитесь что uv установлен: uv --version")
print(" 2. Установите зависимости: uv pip install -r requirements.txt")
print(" 3. Запустите сборку: python build_exe.py")
return 1
if __name__ == '__main__':
sys.exit(main())
|