Files
kadastr14/build_32bit_final.py

159 lines
6.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.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""
Скрипт для создания 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)