Melhora o script de build Linux com venv, executável único e empacotamento GTK enxuto#17
Melhora o script de build Linux com venv, executável único e empacotamento GTK enxuto#17samuelveigarangel wants to merge 2 commits into
Conversation
|
Revisando.... |
pitangainnovare
left a comment
There was a problem hiding this comment.
Sugiro que o python adotado seja o do sistema (o que é mais certo de ser obtido por meio de /usr/bin/python ou /usr/bin/python3 em lugar de python3, que pode ser um link para python de conda). Talvez caiba fazer um which python e criar alguma lógica para garantir qual é o python do sistema.
Isso é preciso para que as deps python3-gi, etc, fiquem visíveis para o python correto - veja o erro nos comentários.
- Sugiro mover o arquivo README para a raiz do repositório
- Faltou acrescentar instruções de build para linux no PR e no README
| rm -rf "$VENV_DIR" | ||
| fi | ||
| if [[ ! -d "$VENV_DIR" ]]; then | ||
| python3 -m venv --system-site-packages "$VENV_DIR" |
There was a problem hiding this comment.
Se a pessoa possuir o miniconda ou o conda ou outro framework que encapula versões de python, esse código usa o python desse framewor, que não enxerga os pacotes instalados no sistema. E por causa disso, ocorre o erro de Missing GTK bindings (gi).
Sugiro adotar o python disponível em /usr/bin/python3 no lugar desse python3 (que pode ser um atalho para outro python qualquer, inclusive do conda).
Veja o erro persistindo memos após a instalação das deps:
Veja como pode ser resolvido usando o SYSTEM_PYTHON (apenas mudar a linha que chama python3 é o suficiente - para /usr/bin/python3):
#!/usr/bin/env bash
set -euo pipefail
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
cd "$ROOT_DIR"
VENV_DIR="${ROOT_DIR}/.venv"
SYSTEM_PYTHON="/usr/bin/python3"
_ensure_build_venv() {
if [[ -d "$VENV_DIR" ]] && ! "$VENV_DIR/bin/python" -c "import gi" >/dev/null 2>&1; then
echo "Existing venv cannot import gi. Recreating with system-site-packages..."
rm -rf "$VENV_DIR"
fi
if [[ ! -d "$VENV_DIR" ]]; then
"$SYSTEM_PYTHON" -m venv --system-site-packages "$VENV_DIR"
fi
}
# Always use this build venv, even if another venv/conda is active.
_ensure_build_venv
# shellcheck source=/dev/null
source "$VENV_DIR/bin/activate"
echo "Using Python: $(python -c 'import sys; print(sys.executable)')"
if ! python -c "import gi" >/dev/null 2>&1; then
echo "Missing GTK bindings (gi). Install system packages and rebuild:" >&2
echo " sudo apt install python3-gi python3-gi-cairo gir1.2-webkit-6.0" >&2
echo "Also check: /usr/bin/python3 -c 'import gi'" >&2
exit 1
fi
python -m pip install -U pip
python -m pip install -e .
python -m pip install pyinstaller
rm -rf build/spsvalidator dist/spsvalidator spsvalidator.spec
pyinstaller --noconfirm --clean --onefile --windowed \
--name spsvalidator \
--icon src/spsvalidator/web/static/img/icon.png \
--paths src \
--collect-data packtools \
--collect-data spsvalidator \
--hidden-import pkg_resources \
--hidden-import requests \
--hidden-import tenacity \
--hidden-import langdetect \
--hidden-import gi \
--hidden-import gi.repository \
--hidden-import gi.repository.Gtk \
--hidden-import gi.repository.WebKit2 \
--hidden-import webview.platforms.gtk \
--exclude-module webview.platforms.qt \
--exclude-module webview.platforms.android \
--exclude-module webview.platforms.cocoa \
--exclude-module webview.platforms.winforms \
--exclude-module webview.platforms.edgechromium \
--exclude-module qtpy \
--exclude-module PyQt6 \
--exclude-module PySide6 \
--exclude-module black \
--exclude-module pytest \
--exclude-module isort \
--copy-metadata setuptools \
src/spsvalidator/main.py
echo "Linux executable generated at dist/spsvalidator."
echo "Use linuxdeploy/appimagetool to convert it into AppImage."There was a problem hiding this comment.
Esse último foi resolvido instalando gir1.2-webkit2-4.1 via apt install gir1.2-webkit2-4.1. Ainda assim o sistema seguiu acusando ausência de libs. Diria que é preciso tornar o build mais robusto (à prova de KDE e GTK). Ao tentar subir um pacote, o app crashou:
Duas opções:
- Gerar build linux para gtk e gerar outra build linux para kde.
- Aumentar as deps instaladas para garantir bom funcionamento em maior número de IDEs
There was a problem hiding this comment.
Eu posso inserir uma dependência python no arquivo pyproject.toml para ele utilizar essa dependencia. O que tu acha?
There was a problem hiding this comment.
Ou eu posso gerar esse arquivo atraves de um docker temporario.
There was a problem hiding this comment.
É uma ótima alternativa.
Garantir que o executável rode corretamente em gtk e qt é importante.
- Altera script para funcionar com interfaces GTK e QT
pitangainnovare
left a comment
There was a problem hiding this comment.
Dois PRs (este e o #19). O comentário feito em #19 (review) pode ser mais adequado a este PR
|
Testei este PR localmente (Ubuntu 24.04, python3-pyqt5 já instalado via apt) e bash packaging/build_linux.sh falha antes de gerar o binário: conflito entre o PyQt5 do sistema (visível pela venv --system-site-packages) e o PyQt6 que pywebview[qt] instala. Deixei a revisão completa e os detalhes de reprodução no #19, que já inclui este diff: #19 (comment) |
Rossi-Luciano
left a comment
There was a problem hiding this comment.
Testei localmente e bash packaging/build_linux.sh falha antes de gerar o binário (conflito PyQt5/PyQt6). Detalhes completos no comentário acima e na revisão publicada no #19.


Descrição
Atualiza packaging/build_linux.sh para tornar o build Linux mais confiável, portável e leve:
Arquivo para teste
1676-0611-bn-rpass-11-26-1.zip
Issues
CLOSED #1