""" Скрипт для создания 32-битной версии программы KadastrParser Использует Python 3.8 (32-bit) """ import subprocess import sys import os from pathlib import Path def build_32bit_version(): """Создает 32-битную версию программы""" print("🔧 Создание 32-битной версии KadastrParser") print("=" * 50) # Проверяем, что мы в правильной директории if not os.path.exists("main.py"): print("❌ Файл main.py не найден!") print(" Убедитесь, что скрипт запускается из директории с исходным кодом") return False # Параметры для PyInstaller (32-bit) pyinstaller_args = [ "py", "-3.8-32", "-m", "PyInstaller", "main.py", "--onefile", "--windowed", "--name=KadastrParser_32bit", "--icon=NONE", "--add-data=services;services", "--add-data=models;models", "--hidden-import=tkinter", "--hidden-import=pandas", "--hidden-import=openpyxl", "--hidden-import=lxml", "--hidden-import=pathlib2", "--clean", "--noconfirm", "--distpath=dist_32bit", # Отдельная папка для 32-битной версии "--workpath=build_32bit", "--specpath=." ] print("📋 Параметры сборки:") for arg in pyinstaller_args[4:]: # Пропускаем "py -3.8-32 -m PyInstaller" print(f" {arg}") print() print("🚀 Запуск PyInstaller...") try: # Запускаем PyInstaller result = subprocess.run(pyinstaller_args, check=True, capture_output=True, text=True) print("✅ 32-битная сборка завершена успешно!") # Проверяем результат exe_path = Path("dist_32bit") / "KadastrParser_32bit.exe" if exe_path.exists(): size_mb = exe_path.stat().st_size / (1024 * 1024) print(f"📁 Исполняемый файл: {exe_path}") print(f"📏 Размер файла: {size_mb:.1f} MB") # Проверяем архитектуру созданного файла check_exe_architecture(exe_path) else: print("❌ Исполняемый файл не найден!") return False return True except subprocess.CalledProcessError as e: print(f"❌ Ошибка при сборке:") print(f" Код выхода: {e.returncode}") if e.stdout: print(f" Вывод: {e.stdout}") if e.stderr: print(f" Ошибки: {e.stderr}") return False except Exception as e: print(f"❌ Неожиданная ошибка: {e}") return False def check_exe_architecture(exe_path): """Проверяет архитектуру исполняемого файла""" try: # Используем file command или dumpbin если доступны result = subprocess.run( ["file", str(exe_path)], capture_output=True, text=True, errors='ignore' ) if result.returncode == 0: output = result.stdout.lower() if "pe32" in output and "pe32+" not in output: print("✅ Архитектура: 32-bit (PE32)") elif "pe32+" in output: print("⚠️ Архитектура: 64-bit (PE32+)") else: print(f"ℹ️ Архитектура: {output.strip()}") else: print("ℹ️ Не удалось определить архитектуру (file command недоступен)") except FileNotFoundError: print("ℹ️ Не удалось определить архитектуру (file command не найден)") except Exception as e: print(f"ℹ️ Ошибка при проверке архитектуры: {e}") def create_readme(): """Создает README для 32-битной версии""" readme_content = """# KadastrParser 32-bit версия ## Системные требования - Windows 7/8/10/11 (32-bit или 64-bit) - Минимум 512 MB оперативной памяти - 100 MB свободного места на диске ## Установка 1. Скачайте KadastrParser_32bit.exe 2. Поместите файл в любую папку 3. Запустите двойным кликом ## Использование 1. Запустите программу 2. Выберите папку с XML файлами 3. (Опционально) Выберите Excel файл со списком кадастровых номеров 4. Нажмите "Начать обработку" ## Результаты Программа создает папку "results" рядом с exe файлом: - all_xml_files/ - все найденные XML файлы - matching_cadastral_files/ - файлы из Excel списка - updated_cadastral_list.xlsx - обновленный Excel файл - processing_report.txt - подробный отчет ## Поддержка Программа поддерживает кадастровые номера в формате: XX:XX:XXXXXXX:XXX """ readme_path = Path("dist_32bit") / "README.txt" readme_path.parent.mkdir(exist_ok=True) with open(readme_path, 'w', encoding='utf-8') as f: f.write(readme_content) print(f"📝 Создан файл README: {readme_path}") if __name__ == "__main__": success = build_32bit_version() if success: create_readme() print("\n🎉 32-битная версия готова к использованию!") print("📦 Файлы находятся в папке 'dist_32bit'") else: print("\n💥 Сборка не удалась!") sys.exit(1)