125 lines
5.2 KiB
Bash
Executable File
125 lines
5.2 KiB
Bash
Executable File
#!/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
|