* другой алгоритм отслеживания изменённых сообщений. По событиям вместо частых запросов. * add: portable-install.sh
146 lines
4.2 KiB
Bash
146 lines
4.2 KiB
Bash
#!/bin/bash
|
||
|
||
# Настройки
|
||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||
PYTHON_DIR="$SCRIPT_DIR/python312"
|
||
PYTHON_URL="https://github.com/astral-sh/python-build-standalone/releases/download/20250612/cpython-3.12.11+20250612-x86_64-unknown-linux-gnu-install_only_stripped.tar.gz"
|
||
PYTHON_EXE="$PYTHON_DIR/bin/python3.12"
|
||
|
||
# Цвета
|
||
GREEN='\033[32m'
|
||
YELLOW='\033[33m'
|
||
RED='\033[31m'
|
||
NC='\033[0m'
|
||
|
||
echo_color() {
|
||
echo -e "${1}${2}${NC}"
|
||
}
|
||
|
||
run_cmd() {
|
||
if ! eval "$1"; then
|
||
echo_color "$RED" "[-] Ошибка выполнения: $1"
|
||
exit 1
|
||
fi
|
||
}
|
||
|
||
# Проверка, установлен ли Python
|
||
if [[ -f "$PYTHON_EXE" ]]; then
|
||
echo_color "$GREEN" "[ ] Python уже установлен"
|
||
"$PYTHON_EXE" --version
|
||
else
|
||
echo_color "$YELLOW" "[*] Установка Python..."
|
||
|
||
mkdir -p "$PYTHON_DIR" || {
|
||
echo_color "$RED" "[-] Ошибка создания папки $PYTHON_DIR"
|
||
exit 1
|
||
}
|
||
|
||
curl -L -o python.tar.gz "$PYTHON_URL" || {
|
||
echo_color "$RED" "[-] Ошибка загрузки Python"
|
||
exit 1
|
||
}
|
||
|
||
tar --strip-components=1 -xzf python.tar.gz -C "$PYTHON_DIR" || {
|
||
echo_color "$RED" "[-] Ошибка распаковки"
|
||
rm -f python.tar.gz
|
||
exit 1
|
||
}
|
||
|
||
rm -f python.tar.gz
|
||
|
||
# Ссылка для удобства
|
||
ln -sf python3.12 "$PYTHON_DIR/bin/python"
|
||
|
||
echo_color "$GREEN" "[+] Python установлен"
|
||
|
||
# Установка pip
|
||
echo_color "$YELLOW" "[*] Установка pip"
|
||
curl -L -o get-pip.py 'https://bootstrap.pypa.io/get-pip.py' || {
|
||
echo_color "$RED" "[-] Не удалось скачать get-pip.py"
|
||
exit 1
|
||
}
|
||
|
||
"$PYTHON_EXE" get-pip.py --no-warn-script-location || {
|
||
echo_color "$RED" "[-] Ошибка установки pip"
|
||
rm -f get-pip.py
|
||
exit 1
|
||
}
|
||
|
||
rm -f get-pip.py
|
||
|
||
# Обновление базовых пакетов
|
||
echo_color "$YELLOW" "[*] Обновление pip, setuptools, wheel"
|
||
"$PYTHON_EXE" -m pip install --upgrade pip setuptools wheel --no-cache-dir || {
|
||
echo_color "$RED" "[-] Ошибка обновления"
|
||
exit 1
|
||
}
|
||
|
||
# Установка requirements.txt
|
||
if [[ -f "$SCRIPT_DIR/requirements.txt" ]]; then
|
||
echo_color "$YELLOW" "[*] Установка зависимостей"
|
||
"$PYTHON_EXE" -m pip install -r "$SCRIPT_DIR/requirements.txt" --no-cache-dir || {
|
||
echo_color "$RED" "[-] Ошибка при установке пакетов"
|
||
exit 1
|
||
}
|
||
fi
|
||
fi
|
||
|
||
# === Создание run_me.sh (без запуска!) ===
|
||
RUN_ME="$SCRIPT_DIR/run_me.sh"
|
||
if [[ -f "$RUN_ME" ]]; then
|
||
echo_color "$GREEN" "[ ] run_me.sh уже существует"
|
||
else
|
||
echo_color "$YELLOW" "[+] Создание run_me.sh"
|
||
cat > "$RUN_ME" << 'EOF'
|
||
#!/bin/bash
|
||
cd "$(dirname "$0")"
|
||
source python312/bin/activate
|
||
python main.py
|
||
EOF
|
||
chmod +x "$RUN_ME"
|
||
echo_color "$GREEN" "[✔] run_me.sh создан"
|
||
fi
|
||
|
||
# === Создание activate и pyvenv.cfg ===
|
||
ACTIVATE_SCRIPT="$PYTHON_DIR/bin/activate"
|
||
PYVENV_CFG="$PYTHON_DIR/pyvenv.cfg"
|
||
SITE_PACKAGES="$PYTHON_DIR/lib/python3.12/site-packages"
|
||
|
||
mkdir -p "$PYTHON_DIR/bin" "$SITE_PACKAGES"
|
||
|
||
# sitecustomize.py
|
||
cat > "$SITE_PACKAGES/sitecustomize.py" << 'EOF'
|
||
import site
|
||
import os
|
||
import sys
|
||
virtual_env = os.getenv("VIRTUAL_ENV")
|
||
if virtual_env:
|
||
sys.prefix = virtual_env
|
||
sys.exec_prefix = virtual_env
|
||
def getsitepackages():
|
||
return [os.path.join(virtual_env, "lib", "python3.12", "site-packages")]
|
||
site.getsitepackages = getsitepackages
|
||
EOF
|
||
|
||
# pyvenv.cfg
|
||
cat > "$PYVENV_CFG" << EOF
|
||
home = $SCRIPT_DIR/python312
|
||
include-system-site-packages = false
|
||
version = 3.12.11
|
||
executable = $PYTHON_DIR/bin/python3.12
|
||
command = $PYTHON_DIR/bin/python3.12
|
||
EOF
|
||
|
||
# activate
|
||
cat > "$ACTIVATE_SCRIPT" << 'EOF'
|
||
#!/bin/bash
|
||
export VIRTUAL_ENV="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||
export VIRTUAL_ENV_PROMPT=$(basename "$VIRTUAL_ENV")
|
||
export _OLD_VIRTUAL_PATH="$PATH"
|
||
export PATH="$VIRTUAL_ENV/bin:$PATH"
|
||
unset PYTHONHOME
|
||
export PS1="($VIRTUAL_ENV_PROMPT) $PS1"
|
||
EOF
|
||
chmod +x "$ACTIVATE_SCRIPT"
|
||
|
||
echo_color "$GREEN" "[✔️] Установка завершена. Запуск через rum-me.sh" |