159 lines
6.1 KiB
Python
159 lines
6.1 KiB
Python
"""
|
||
Скрипт для создания 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)
|