This commit is contained in:
2026-04-29 16:14:39 +05:00
commit 02d52b2850
27 changed files with 65576 additions and 0 deletions

124
build_wine.sh Executable file
View File

@@ -0,0 +1,124 @@
#!/usr/bin/env bash
# Сборка ФИАС_поиск.exe на Linux через Wine (32-bit Python 3.8 for Windows)
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PYTHON_VERSION="3.8.10"
PYTHON_URL="https://www.python.org/ftp/python/${PYTHON_VERSION}/python-${PYTHON_VERSION}.exe"
PYTHON_INSTALLER="${SCRIPT_DIR}/python-${PYTHON_VERSION}-win32.exe"
export WINEARCH=win32
export WINEPREFIX="${HOME}/.wine_fias32"
export WINEDEBUG=-all # подавить лишние логи Wine
WINE_PYTHON="wine ${WINEPREFIX}/drive_c/Python38/python.exe"
# ─── 1. Wine ────────────────────────────────────────────────────────────────
if ! command -v wine &>/dev/null; then
echo ">>> Установка Wine..."
sudo apt-get update -q
sudo apt-get install -y wine wine32
else
echo ">>> Wine $(wine --version)"
fi
# ─── 2. Wine prefix (32-bit) ────────────────────────────────────────────────
if [ ! -d "${WINEPREFIX}" ]; then
echo ">>> Создание 32-bit Wine prefix..."
wineboot --init 2>/dev/null
# Подождать инициализации
sleep 4
fi
# ─── 3. Python 3.8.10 32-bit ────────────────────────────────────────────────
PYTHON_EXE="${WINEPREFIX}/drive_c/Python38/python.exe"
if [ ! -f "${PYTHON_EXE}" ]; then
if [ ! -f "${PYTHON_INSTALLER}" ]; then
echo ">>> Скачивание Python ${PYTHON_VERSION} (win32)..."
wget -q --show-progress "${PYTHON_URL}" -O "${PYTHON_INSTALLER}"
fi
echo ">>> Установка Python в Wine..."
wine "${PYTHON_INSTALLER}" \
/quiet \
InstallAllUsers=0 \
PrependPath=0 \
Include_launcher=0 \
TargetDir="C:\\Python38"
sleep 5
echo ">>> Python установлен: ${PYTHON_EXE}"
else
echo ">>> Python уже установлен"
fi
# ─── 4. pip + зависимости ───────────────────────────────────────────────────
echo ">>> Обновление pip..."
${WINE_PYTHON} -m pip install --upgrade pip --quiet
echo ">>> Установка зависимостей..."
${WINE_PYTHON} -m pip install \
"selenium>=4.15,<5" \
"webdriver-manager>=4,<5" \
"openpyxl>=3.1,<4" \
"pdfplumber>=0.10,<1" \
"requests>=2.31,<3" \
"pyinstaller>=5.13,<7" \
--quiet
# ─── 5. PyInstaller ─────────────────────────────────────────────────────────
echo ">>> Сборка .exe ..."
cd "${SCRIPT_DIR}"
# Очистка
rm -rf build dist *.spec
${WINE_PYTHON} -m PyInstaller \
--onefile \
--noconsole \
--name "ФИАС_поиск" \
--collect-all selenium \
--collect-all webdriver_manager \
--collect-all pdfplumber \
--collect-all pdfminer \
--collect-all openpyxl \
--collect-all certifi \
--hidden-import selenium.webdriver.firefox.webdriver \
--hidden-import selenium.webdriver.firefox.options \
--hidden-import selenium.webdriver.firefox.service \
--hidden-import selenium.webdriver.support.expected_conditions \
--hidden-import selenium.webdriver.common.by \
--hidden-import webdriver_manager.firefox \
--hidden-import pdfminer.high_level \
--hidden-import pdfminer.converter \
--hidden-import pdfminer.layout \
--hidden-import pdfminer.pdfpage \
--hidden-import pdfminer.pdfinterp \
--hidden-import pdfminer.pdffont \
--hidden-import pdfminer.pdftypes \
--hidden-import pdfminer.pdfparser \
--hidden-import pdfminer.pdfdevice \
--hidden-import openpyxl.styles \
--hidden-import openpyxl.utils \
--hidden-import cryptography \
--hidden-import tkinter \
--hidden-import tkinter.filedialog \
--hidden-import tkinter.scrolledtext \
--hidden-import tkinter.messagebox \
--hidden-import queue \
--hidden-import logging \
--hidden-import platform \
main.py
# ─── 6. Результат ───────────────────────────────────────────────────────────
EXE="${SCRIPT_DIR}/dist/ФИАС_поиск.exe"
if [ -f "${EXE}" ]; then
SIZE=$(du -sh "${EXE}" | cut -f1)
echo ""
echo "╔══════════════════════════════════════════════╗"
echo " Готово! dist/ФИАС_поиск.exe (${SIZE})"
echo " Firefox должен быть установлен на Windows."
echo " geckodriver скачается при первом запуске."
echo "╚══════════════════════════════════════════════╝"
else
echo "ОШИБКА: .exe не создан"
exit 1
fi