#!/usr/bin/env python3 """ Скрипт для подготовки проекта к деплою на Hugging Face Spaces """ import os import shutil import subprocess def create_structure(): """Создает правильную структуру проекта""" print(" Создание структуры проекта...") # Создаем папки если их нет folders = ['static', 'templates'] for folder in folders: if not os.path.exists(folder): os.makedirs(folder) print(f" Создана папка: {folder}") else: print(f" Папка уже существует: {folder}") # Проверяем наличие script.js в static/ if os.path.exists('script.js'): shutil.move('script.js', 'static/script.js') print(" script.js перемещен в static/") return True def check_files(): """Проверяет наличие необходимых файлов""" print("\n🔍 Проверка файлов...") required_files = ['app.py', 'requirements.txt', 'Dockerfile'] missing_files = [] for file in required_files: if os.path.exists(file): print(f" {file}") else: print(f" {file} - ОТСУТСТВУЕТ!") missing_files.append(file) if missing_files: print(f"\n Не хватает файлов: {missing_files}") return False return True def clean_unnecessary(): """Удаляет ненужные файлы для HF""" print("\n🗑 Очистка ненужных файлов...") files_to_remove = [ 'railway.json', 'check_railway.py', 'Procfile', 'runtime.txt', 'nixpacks.toml', 'pyvenv.cfg' ] for file in files_to_remove: if os.path.exists(file): try: os.remove(file) print(f" Удален: {file}") except: print(f"Не удалось удалить: {file}") return True def update_requirements(): """Обновляет requirements.txt""" print("\n Обновление зависимостей...") # Упрощенные зависимости requirements = """Flask==2.3.3 Flask-CORS==4.0.0 requests==2.31.0 urllib3==2.0.7 Werkzeug==2.3.7 python-dotenv==1.0.0""" with open('requirements.txt', 'w') as f: f.write(requirements) print(" ✅ requirements.txt обновлен") return True def git_operations(): """Выполняет Git операции""" print("\n💾 Git операции...") try: # Добавляем все файлы subprocess.run(['git', 'add', '.'], check=True) print(" Файлы добавлены в Git") # Коммит subprocess.run(['git', 'commit', '-m', 'Prepare for Hugging Face Spaces deployment'], check=True) print(" Коммит создан") return True except subprocess.CalledProcessError as e: print(f" Ошибка Git: {e}") return False def main(): print(" ПОДГОТОВКА К HUGGING FACE SPACES") print("=" * 50) # Выполняем шаги steps = [ ("Структура проекта", create_structure), ("Проверка файлов", check_files), ("Очистка", clean_unnecessary), ("Зависимости", update_requirements), ] all_ok = True for step_name, step_func in steps: print(f"\n {step_name}:") if not step_func(): all_ok = False if all_ok: print("\n" + "=" * 50) print("Проект готов к деплою на Hugging Face!") print("\nСледующие шаги:") print("1. Откройте https://huggingface.co/spaces") print("2. Нажмите 'Create new Space'") print("3. Выберите:") print(" - Name: pdf-table-extractor") print(" - SDK: Docker") print(" - Visibility: Public") print("4. Нажмите 'Create Space'") print("5. Загрузите файлы или свяжите с GitHub") else: print("\nЕсть проблемы, которые нужно исправить") if __name__ == '__main__': main()