install: фолбэк pip --target=lib, если в python3 нет venv

На многих сборках Entware (включая aarch64-k3.10) пакет python3-venv
недоступен и `python3 -m venv` падает с `No module named venv`.
Делаем установку без venv:
- если venv создаётся — используем его (как раньше)
- иначе ставим зависимости в $INST/lib через `pip install --target=lib`
- run.sh и init-скрипт автоопределяют режим (PYTHONPATH=lib для второго)

Также: opkg install python3-venv стал опциональным (как и был, но без
обязательного завершения цепочки).
This commit is contained in:
Андрей Бобырев
2026-04-26 00:26:29 +03:00
parent caa1dd1602
commit af1981cf0c
3 changed files with 61 additions and 15 deletions

22
run.sh
View File

@@ -1,8 +1,24 @@
#!/bin/sh
# Запуск через Waitress (рекомендуется на роутере)
cd "$(dirname "$0")" || exit 1
# Запуск через Waitress (рекомендуется на роутере). Поддерживает оба режима:
# - venv: $DIR/venv/bin/python3
# - lib/: /opt/bin/python3 + PYTHONPATH=$DIR/lib (если venv недоступен)
DIR="$(cd "$(dirname "$0")" && pwd)"
cd "$DIR" || exit 1
set -a
[ -f .env ] && . ./.env
set +a
export PYTHONUNBUFFERED=1
exec /opt/bin/python3 -m waitress --listen="0.0.0.0:${PORT:-2001}" app:app
if [ -x "$DIR/venv/bin/python3" ]; then
PYBIN="$DIR/venv/bin/python3"
elif [ -d "$DIR/lib" ] && [ -x /opt/bin/python3 ]; then
PYBIN="/opt/bin/python3"
export PYTHONPATH="$DIR/lib:${PYTHONPATH:-}"
elif command -v python3 >/dev/null 2>&1; then
PYBIN="$(command -v python3)"
else
echo "Нет python3. Установите: opkg install python3 python3-pip" >&2
exit 1
fi
exec "$PYBIN" -m waitress --listen="0.0.0.0:${PORT:-2001}" app:app