fix(setup_server): обработка отказа venv/ensurepip на Linux (fallback через get-pip) + python из venv для проверок

This commit is contained in:
2026-07-20 23:10:50 +03:00
parent cf497cf3a2
commit fadecb9dc7
2 changed files with 58 additions and 17 deletions
+57 -17
View File
@@ -20,6 +20,51 @@ esac
ARCH="$(uname -m)"
echo "📍 Платформа: $PLATFORM ($ARCH)"
# --- Выбор интерпретатора Python для создания venv ---
# Предпочитаем python3.13, при отсутствии — любой python3.
if command -v python3.13 &> /dev/null; then
PYBIN="python3.13"
elif command -v python3 &> /dev/null; then
PYBIN="python3"
else
echo "❌ python3 не найден в PATH"
exit 1
fi
echo "🐍 Интерпретатор: $PYBIN ($($PYBIN --version 2>&1))"
# --- Создание venv (с обработкой отсутствия ensurepip/venv-пакета) ---
create_venv() {
if [ -d ".venv" ]; then
echo " .venv уже существует — пропускаю создание"
return 0
fi
if "$PYBIN" -m venv .venv; then
return 0
fi
echo "⚠️ '$PYBIN -m venv .venv' не удался (частая причина — не установлен"
echo " пакет python3-venv / ensurepip в дистрибутиве)."
if [ "$PLATFORM" = "linux" ]; then
echo " Debian/Ubuntu: sudo apt-get install -y python3.13-venv python3.13-dev"
echo " (или python3-venv, если версия другая)"
echo " Fedora/RHEL: sudo dnf install -y python3-devel"
fi
echo " Пробую fallback: venv без pip + bootstrap через get-pip.py..."
if ! "$PYBIN" -m venv --without-pip .venv; then
echo "❌ Не удалось создать venv даже без pip. Установите python3-venv и повторите."
return 1
fi
if ! curl -fsSL https://bootstrap.pypa.io/get-pip.py -o /tmp/get-pip.py; then
echo "❌ Не удалось скачать get-pip.py (нет сети?). Установите pip вручную."
return 1
fi
if ! .venv/bin/python /tmp/get-pip.py; then
echo "❌ bootstrap pip через get-pip.py не удался."
return 1
fi
rm -f /tmp/get-pip.py
return 0
}
# ============================================
# macOS — установка без CUDA (есть MPS на Apple Silicon)
# ============================================
@@ -37,19 +82,17 @@ if [ "$PLATFORM" = "macos" ]; then
fi
echo " Homebrew: $(brew --version | head -1)"
# --- Python через brew (если нет) ---
if ! command -v python@3.13 &> /dev/null; then
# --- Python через brew (если нет python3.13) ---
if ! command -v python3.13 &> /dev/null; then
echo "📥 Устанавливаю python@3.13 через brew..."
brew install python@3.13
# brew ставит команду python3.13
fi
echo "🐍 Python: $(python3.13 --version)"
# --- Создание venv ---
echo ""
echo "📦 Создание виртуального окружения venv..."
if [ ! -d ".venv" ]; then
python3.13 -m venv .venv
fi
create_venv || exit 1
source .venv/bin/activate
echo " Активировано: $(which python)"
@@ -71,7 +114,7 @@ if [ "$PLATFORM" = "macos" ]; then
# --- Проверка PyTorch + устройства ---
echo ""
echo "✅ Проверка PyTorch..."
python@3.13 -c "
python -c "
import torch, platform
print(f'PyTorch: {torch.__version__}')
print(f'MPS available: {torch.backends.mps.is_available()}')
@@ -96,17 +139,14 @@ else
echo "⚠️ nvidia-smi не найден — CUDA может быть не установлена"
fi
# --- Проверка Python ---
echo ""
echo "🐍 Проверка Python..."
python3.13 --version
# --- Создание venv ---
echo ""
echo "🐍 Проверка Python..."
"$PYBIN" --version
echo ""
echo "📦 Создание виртуального окружения venv..."
if [ ! -d ".venv" ]; then
python3.13 -m venv .venv
fi
create_venv || exit 1
source .venv/bin/activate
echo " Активировано: $(which python)"
@@ -128,7 +168,7 @@ else
# --- Проверка PyTorch + CUDA ---
echo ""
echo "✅ Проверка PyTorch + CUDA..."
python3.13 -c "
python -c "
import torch
print(f'PyTorch: {torch.__version__}')
print(f'CUDA available: {torch.cuda.is_available()}')
@@ -143,7 +183,7 @@ fi
# ============================================
echo ""
echo "✅ Проверка MLflow..."
python3.13 -c "import mlflow; print(f'MLflow: {mlflow.__version__}')"
python -c "import mlflow; print(f'MLflow: {mlflow.__version__}')"
echo ""
echo "============================================"