stop
This commit is contained in:
124
build_wine.sh
Executable file
124
build_wine.sh
Executable 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
|
||||
Reference in New Issue
Block a user