💡 Зачем это нужно — Python 3.13 уже встроен в Debian 13 (Trixie) и устанавливается одной командой через APT. Но если вы работаете на Debian 12 (Bookworm) или Debian 11 (Bullseye), то в официальных репозиториях его нет. Мы рассмотрим оба варианта: быструю установку через APT для Trixie и безопасную сборку из исходников для более старых версий.
⚠️ Важное предупреждение: Debian использует свой Python для системных утилит и APT. Никогда не удаляйте и не заменяйте системный Python (/usr/bin/python3). Всегда используйте версионные команды (python3.13) и виртуальные окружения.
Предварительные требования
Прежде чем начать, убедитесь, что ваша система готова:
⚠️ ВАЖНО: Проверьте права sudo перед установкой
Если вы не уверены, есть ли у вашего пользователя права администратора, выполните в терминале:
sudo whoami
Что делает:
sudo— выполняет команду от имени суперпользователяwhoami— показывает имя текущего пользователя
Зачем: Проверяет, может ли ваш пользователь выполнять команды с правами root.
✅ Если выводит root — всё в порядке, можете продолжать.
❌ Если выводит is not in the sudoers file — сначала пройдите наше руководство по настройке sudo.
Дополнительные требования:
- Для APT-установки (Debian 13): Debian 13 (Trixie) с доступом в интернет
- Для сборки из исходников (Debian 12/11): ~2-3 ГБ свободного места, интернет
- Общее: Понимание разницы между системным Python и пользовательским
Выбор метода установки Python 3.13
| Метод | Для каких версий Debian | Откуда берётся | Как обновляется | Когда использовать |
|---|---|---|---|---|
| APT-пакет Debian | Только Debian 13 (Trixie) | Репозитории Debian | Через APT (автоматически) | Рекомендуется для Trixie — стандартная установка |
| Сборка из исходников | Debian 12, Debian 11 (опционально Debian 13) | Python.org | Вручную через скрипт | Когда нужна точная версия 3.13.x на старых Debian |
| Testing/unstable или PPA | Не для stable | Сторонние источники | Не рекомендуется | Избегайте — сломает систему |
💡 Особенность Debian 13: В Trixie пакет python3.13 уже есть в репозиториях, но он может отставать от последней минорной версии от Python.org. Если вам нужна самая свежая 3.13.x — используйте сборку из исходников с отдельным префиксом.
Что нужно знать перед установкой (правила безопасности)
Чтобы не повредить Debian, соблюдайте эти правила:
| Правило | Почему это важно |
|---|---|
Запускайте Python командой python3.13 | Системный python3 принадлежит Debian — не трогайте его |
Используйте виртуальные окружения (venv) | pip не будет писать в системные директории |
Сборка использует make altinstall | Устанавливает в /usr/local/python3.13, а не поверх системного |
Не создавайте update-alternatives для python3 | Это заменит системный интерпретатор |
| Не удаляйте системный Python | Без него перестанут работать APT и утилиты |
Проверка вашей версии Debian
. /etc/os-release
printf '%s\n' "$PRETTY_NAME"
Что делает: Показывает точное название вашей версии Debian.
python3 --version
Что делает: Показывает версию системного Python.
python3.13 --version 2>/dev/null || echo "Python 3.13 не установлен"
Что делает: Проверяет, не установлен ли уже Python 3.13.
Ожидаемые выводы:
| Debian 13 (Trixie) | Debian 12 (Bookworm) | Debian 11 (Bullseye) |
|---|---|---|
Debian GNU/Linux 13 (trixie) | Debian GNU/Linux 12 (bookworm) | Debian GNU/Linux 11 (bullseye) |
Python 3.13.5 | Python 3.11.2 | Python 3.9.2 |
Python 3.13.5 (уже установлен) | Python 3.13 не установлен | Python 3.13 не установлен |
Метод 1: Установка Python 3.13 через APT (только Debian 13)
Этот метод работает только на Debian 13 (Trixie). Если у вас Debian 12 или 11 — переходите к Методу 2.
Шаг 1: Обновление системы
sudo apt update
Что делает: Обновляет список доступных пакетов.
Шаг 2: Установка Python 3.13 и дополнительных пакетов
sudo apt install -y python3.13 python3.13-venv python3.13-dev
Что делает:
python3.13— сам интерпретаторpython3.13-venv— модуль для создания виртуальных окруженийpython3.13-dev— заголовочные файлы для компиляции C-расширений
Зачем: venv и dev нужны не всегда, но лучше установить сразу — они пригодятся для разработки.
Шаг 3: Проверка установки
python3.13 --version
Ожидаемый вывод: Python 3.13.x (где x — версия из репозиториев Debian).
python3.13 -c "import ssl, sqlite3, bz2, lzma, zlib, ctypes, readline; print('Python 3.13 готов на Debian')"
Что делает: Проверяет, что основные модули стандартной библиотеки работают.
Ожидаемый вывод: Python 3.13 готов на Debian
Метод 2: Установка Python 3.13 из исходников (Debian 12, 11 или опционально Debian 13)
Этот метод подходит для Debian 12, Debian 11, а также для Debian 13, если вам нужна самая свежая минорная версия от Python.org.
Подготовка Debian к сборке
Шаг 1: Обновление системы
sudo apt update
Шаг 2: Установка инструментов сборки и зависимостей
sudo apt install -y ca-certificates wget python3 build-essential zlib1g-dev libncurses-dev \
libgdbm-dev libgdbm-compat-dev libnss3-dev libssl-dev libsqlite3-dev libreadline-dev \
libffi-dev libbz2-dev liblzma-dev uuid-dev libexpat1-dev tk-dev pkg-config make libdb-dev
Что делает: Устанавливает компилятор gcc, заголовочные файлы и библиотеки, необходимые для сборки Python со всеми модулями.
Зачем: Без этих пакетов Python соберётся с минимальной функциональностью — модули ssl, sqlite3, tkinter и другие будут отсутствовать.
Шаг 3: Проверка свободного места
df -h "$HOME" /usr/local
Что делает: Показывает свободное место в домашней директории и /usr/local.
Зачем: Сборка требует несколько гигабайт свободного места (~2-3 ГБ).
Создание скрипта-помощника для сборки
Вместо выполнения десятка команд вручную, мы создадим скрипт, который автоматически:
- Найдёт последнюю версию Python 3.13 на python.org
- Скачает исходники и проверит их SHA-256 контрольную сумму
- Соберёт Python с оптимальными настройками
- Установит его в
/usr/local/python3.13 - Создаст символическую ссылку
/usr/local/bin/python3.13
Создание файла скрипта
cat <<'EOF' > install-python313-source-debian.sh
#!/usr/bin/env bash
# UnishellRu Python 3.13 source helper
set -euo pipefail
INSTALL_PREFIX="${INSTALL_PREFIX:-/usr/local/python3.13}"
BUILD_DIR="${BUILD_DIR:-$HOME/python3.13-source-build}"
PY313_COMMAND_NAME="${PY313_COMMAND_NAME:-python3.13}"
PY313_BIN="$INSTALL_PREFIX/bin/python3.13"
PY313_FORCE_REBUILD="${PY313_FORCE_REBUILD:-0}"
validate_settings() {
if [[ -z "$INSTALL_PREFIX" || "$INSTALL_PREFIX" != /* ]]; then
printf 'INSTALL_PREFIX must be an absolute path.\n' >&2
exit 1
fi
if [[ -z "$PY313_COMMAND_NAME" || "$PY313_COMMAND_NAME" == */* || "$PY313_COMMAND_NAME" =~ [[:space:]] ]]; then
printf 'PY313_COMMAND_NAME must be a command name, not a path or a value with spaces.\n' >&2
exit 1
fi
}
require_cmd() {
if ! command -v "$1" >/dev/null 2>&1; then
printf 'Missing required command: %s\n' "$1" >&2
exit 1
fi
}
validate_settings
for cmd in python3 awk; do
require_cmd "$cmd"
done
mkdir -p "$BUILD_DIR"
require_link_cmds() {
for cmd in sudo readlink grep mktemp install ln; do
require_cmd "$cmd"
done
}
require_build_cmds() {
for cmd in wget tar make gcc sha256sum nproc tail; do
require_cmd "$cmd"
done
require_link_cmds
}
is_managed_wrapper() {
local path="$1"
local target="$2"
[ -f "$path" ] && grep -Fqx '# UnishellRu Python 3.13 source wrapper' "$path" && grep -Fqx "PY313_SOURCE_TARGET='$target'" "$path"
}
write_command_wrapper() {
local target="$1"
local link="$2"
local tmp_file=""
tmp_file="$(mktemp)"
{
printf '%s\n' '#!/usr/bin/env sh'
printf '%s\n' '# UnishellRu Python 3.13 source wrapper'
printf "PY313_SOURCE_TARGET='%s'\n" "$target"
# shellcheck disable=SC2016
printf '%s\n' 'exec "$PY313_SOURCE_TARGET" "$@"'
} >"$tmp_file"
sudo install -m 0755 "$tmp_file" "$link"
rm -f "$tmp_file"
}
check_command_target_safe() {
local target="$1"
local link="/usr/local/bin/$PY313_COMMAND_NAME"
local existing_path=""
local existing_target=""
if existing_path="$(command -v "$PY313_COMMAND_NAME" 2>/dev/null)"; then
existing_target="$(readlink -f "$existing_path" 2>/dev/null || true)"
if [ -n "$existing_target" ] && [ "$existing_target" != "$target" ] && ! is_managed_wrapper "$existing_path" "$target"; then
printf 'Refusing to shadow existing %s at %s\n' "$PY313_COMMAND_NAME" "$existing_path" >&2
printf 'Set PY313_COMMAND_NAME to a separate name, such as python3.13-upstream, when another package owns the command.\n' >&2
exit 1
fi
fi
if [ -e "$link" ] && [ ! -L "$link" ] && ! is_managed_wrapper "$link" "$target"; then
printf 'Refusing to overwrite unmanaged path: %s\n' "$link" >&2
exit 1
fi
}
install_command_link() {
local target="$1"
local link="/usr/local/bin/$PY313_COMMAND_NAME"
check_command_target_safe "$target"
if [ "$PY313_COMMAND_NAME" = "python3.13" ]; then
sudo ln -sfn "$target" "$link"
else
write_command_wrapper "$target" "$link"
fi
}
fetch_release_metadata() {
python3 - <<'PY'
import gzip
import re
from urllib.request import urlopen
release_html = urlopen("https://www.python.org/downloads/latest/python3.13/", timeout=20).read()
if release_html.startswith(b"\x1f\x8b"):
release_html = gzip.decompress(release_html)
release_html = release_html.decode("utf-8")
version_match = re.search(r'<h1 class="page-title">Python (3\.13\.\d+)</h1>', release_html)
if not version_match:
raise SystemExit("Could not find the latest Python 3.13 release version")
version = version_match.group(1)
row = re.search(
r'<td>\s*<td><a href="(?P<url>[^"]*Python-' + re.escape(version) + r'\.tar\.xz)">XZ compressed source tarball</a></table>.*?<code class="checksum">(?P<checksum>.*?)</code>',
release_html,
re.S,
)
if not row:
raise SystemExit("Could not find the XZ source tarball checksum")
checksum_text = re.sub(r"<[^>]+>", "", row.group("checksum"))
sha256 = re.sub(r"[^0-9a-f]", "", checksum_text)
if len(sha256) != 64:
raise SystemExit(f"Unexpected SHA-256 checksum length: {len(sha256)}")
print(f"PY313_VERSION='{version}'")
print(f"PY313_URL='{row.group('url')}'")
print(f"PY313_SHA256='{sha256}'")
PY
}
run_logged() {
local label="$1"
shift
local log_file="$BUILD_DIR/${label}-${PY313_VERSION}.log"
if "$@" >"$log_file" 2>&1; then
printf '%s complete; see %s\n' "$label" "${label}-${PY313_VERSION}.log"
else
printf '%s failed; last log lines:\n' "$label" >&2
tail -n 50 "$log_file" >&2 || true
exit 1
fi
}
metadata_file="$BUILD_DIR/python313-release.env"
fetch_release_metadata >"$metadata_file"
# shellcheck source=/dev/null
. "$metadata_file"
printf 'Using Python %s\n' "$PY313_VERSION"
if [ -x "$PY313_BIN" ]; then
current_version="$("$PY313_BIN" --version | awk '{print $2}')"
if [ "$current_version" = "$PY313_VERSION" ] && [ "$PY313_FORCE_REBUILD" != "1" ]; then
require_link_cmds
install_command_link "$PY313_BIN"
printf 'Python %s already installed at %s\n' "$current_version" "$PY313_BIN"
exit 0
fi
fi
require_build_cmds
check_command_target_safe "$PY313_BIN"
cd "$BUILD_DIR"
archive="Python-${PY313_VERSION}.tar.xz"
srcdir="Python-${PY313_VERSION}"
sudo rm -rf -- "$srcdir"
rm -f -- "$archive"
wget -q -O "$archive" "$PY313_URL"
printf '%s %s\n' "$PY313_SHA256" "$archive" | sha256sum -c -
tar -xf "$archive"
cd "$srcdir"
configure_args=(--with-ensurepip=install "--prefix=$INSTALL_PREFIX")
if [ -n "${PY313_CONFIGURE_EXTRA:-}" ]; then
# shellcheck disable=SC2206
extra_args=($PY313_CONFIGURE_EXTRA)
configure_args+=("${extra_args[@]}")
fi
run_logged configure ./configure "${configure_args[@]}"
run_logged make make -j"$(nproc)"
run_logged altinstall sudo make altinstall
printf '%s\n' "$INSTALL_PREFIX/lib" | sudo tee "/etc/ld.so.conf.d/${PY313_COMMAND_NAME}.conf" >/dev/null
sudo ldconfig
if [ -x "$PY313_BIN" ]; then
install_command_link "$PY313_BIN"
"$PY313_BIN" --version
cd "$BUILD_DIR"
sudo rm -rf -- "$srcdir"
rm -f -- "$archive"
else
printf 'Build completed, but %s was not found.\n' "$PY313_BIN" >&2
exit 1
fi
EOF
Что делает этот скрипт (обзорно):
- Проверяет наличие всех необходимых команд
- Скачивает с python.org страницу последнего релиза Python 3.13 и SHA-256 контрольную сумму
- Скачивает исходники и проверяет их целостность
- Конфигурирует сборку с поддержкой всех модулей
- Собирает Python, используя все ядра процессора
- Устанавливает через
make altinstall(безопасная установка) - Создаёт символическую ссылку в
/usr/local/bin
chmod +x install-python313-source-debian.sh
Что делает: Делает скрипт исполняемым.
Запуск сборки Python 3.13
Для Debian 12 и Debian 11 (стандартная сборка)
./install-python313-source-debian.sh
Ожидаемый вывод:
Using Python 3.13.13
Python-3.13.13.tar.xz: OK
configure complete; see configure-3.13.13.log
make complete; see make-3.13.13.log
altinstall complete; see altinstall-3.13.13.log
Python 3.13.13
Сколько это займёт: На современном компьютере сборка занимает 5-15 минут.
Для Debian 13 (установка последней версии рядом с системной)
Если на Debian 13 вам нужна самая свежая минорная версия (например, 3.13.13, а в репозиториях 3.13.5):
INSTALL_PREFIX=/usr/local/python3.13-upstream \
PY313_COMMAND_NAME=python3.13-upstream \
./install-python313-source-debian.sh
Что делает: Устанавливает Python 3.13 в отдельный префикс с именем команды python3.13-upstream, не конфликтуя с системным пакетом.
Установка скрипта обновления
После успешной сборки (для Debian 12/11):
sudo install -m 0755 install-python313-source-debian.sh /usr/local/bin/update-python313-source
Что делает: Копирует скрипт в /usr/local/bin для удобного обновления.
Для Debian 13 с side-установкой создайте отдельный скрипт-обёртку:
sudo tee /usr/local/bin/update-python313-upstream >/dev/null <<'EOF'
#!/usr/bin/env bash
# UnishellRu Python 3.13 upstream update wrapper
export INSTALL_PREFIX=/usr/local/python3.13-upstream
export PY313_COMMAND_NAME=python3.13-upstream
exec /usr/local/bin/update-python313-source "$@"
EOF
sudo chmod 0755 /usr/local/bin/update-python313-upstream
Проверка установки (сборка из исходников)
Для Debian 12/11:
python3.13 --version
Ожидаемый вывод: Python 3.13.x (актуальная версия с python.org).
python3.13 -c "import ssl, sqlite3, bz2, lzma, zlib, ctypes, readline, tkinter, dbm.gnu, dbm.sqlite3; print('Python 3.13 готов')"
Ожидаемый вывод: Python 3.13 готов
Для Debian 13 (side-установка):
python3.13-upstream --version
python3.13-upstream -m pip --version
Использование Python 3.13 через виртуальное окружение
⚠️ Важнейшее правило: Никогда не устанавливайте пакеты через pip глобально. Всегда используйте виртуальные окружения.
Создание виртуального окружения
mkdir -p "$HOME/venvs"
python3.13 -m venv "$HOME/venvs/py313"
Что делает: Создаёт виртуальное окружение с Python 3.13.
Для side-установки на Debian 13:
python3.13-upstream -m venv "$HOME/venvs/py313-upstream"
Активация окружения
source "$HOME/venvs/py313/bin/activate"
Ожидаемое изменение приглашения: (py313) user@debian:~$
Установка пакетов внутри venv
python -m pip install --upgrade pip
python -m pip install requests
Что делает: Обновляет pip и устанавливает пакет requests только внутри виртуального окружения.
Проверка, что вы внутри venv
which python
Ожидаемый вывод: /home/username/venvs/py313/bin/python
Деактивация окружения
deactivate
Обновление Python 3.13
Обновление APT-пакета (Debian 13)
sudo apt update
sudo apt install --only-upgrade python3.13 python3.13-venv python3.13-dev
Обновление сборки из исходников
update-python313-source
Что делает: Проверяет последнюю версию на python.org и пересобирает, если нужно.
Для side-установки на Debian 13:
update-python313-upstream
Принудительная пересборка (если менялись зависимости или флаги):
PY313_FORCE_REBUILD=1 update-python313-source
Удаление Python 3.13
Удаление APT-пакета (Debian 13)
sudo apt remove python3.13-venv python3.13-dev
Что делает: Удаляет дополнительные пакеты, но оставляет сам интерпретатор (на всякий случай).
⚠️ Не удаляйте python3.13 на Debian 13 — он может понадобиться системе.
Удаление сборки из исходников
⚠️ Перед удалением: Убедитесь, что ни один проект не использует виртуальные окружения с этим Python.
# Удаление символических ссылок
sudo rm -f /usr/local/bin/python3.13
sudo rm -f /usr/local/bin/python3.13-upstream
# Удаление скриптов обновления
sudo rm -f /usr/local/bin/update-python313-source
sudo rm -f /usr/local/bin/update-python313-upstream
# Удаление самих установок Python
sudo rm -rf /usr/local/python3.13
sudo rm -rf /usr/local/python3.13-upstream
# Удаление конфигурации линковщика
sudo rm -f /etc/ld.so.conf.d/python3.13.conf
sudo rm -f /etc/ld.so.conf.d/python3.13-upstream.conf
sudo ldconfig
# Удаление директории со сборкой
sudo rm -rf "$HOME/python3.13-source-build"
# Удаление виртуальных окружений
rm -rf "$HOME/venvs/py313"
rm -rf "$HOME/venvs/py313-upstream"
# Очистка кэша команд
hash -r
Проверка:
command -v python3.13 || echo "Python 3.13 удалён"
python3 --version
Решение типичных проблем
8.1 Ошибка: APT не может найти пакет python3.13
Симптом: sudo apt install python3.13 выдаёт E: Unable to locate package python3.13.
Причина: Вы используете Debian 12 или 11, где нет этого пакета в официальных репозиториях.
Решение: Используйте Метод 2 (сборка из исходников). Не добавляйте testing/unstable или Ubuntu PPA.
8.2 Ошибка: Скрипт отказывается создавать python3.13 (shadow)
Симптом: Скрипт выводит Refusing to shadow existing python3.13 at /usr/bin/python3.13.
Причина: На Debian 13 уже есть системный пакет python3.13, и скрипт не хочет его заменять.
Решение: Используйте side-установку с другим именем:
INSTALL_PREFIX=/usr/local/python3.13-upstream \
PY313_COMMAND_NAME=python3.13-upstream \
./install-python313-source-debian.sh
8.3 Ошибка: pip не работает (ModuleNotFoundError)
Симптом: python3.13 -m pip --version выдаёт ModuleNotFoundError: No module named 'pip'.
Причина: Не установлен модуль venv.
Решение (Debian 13):
sudo apt install python3.13-venv
mkdir -p "$HOME/venvs"
python3.13 -m venv "$HOME/venvs/py313"
source "$HOME/venvs/py313/bin/activate"
python -m pip --version
Решение (Debian 12/11 сборка из исходников): Скрипт уже включает --with-ensurepip=install, pip должен быть. Проверьте путь:
/usr/local/python3.13/bin/pip3.13 --version
8.4 Ошибка: Missing modules после сборки (_ssl, _sqlite3 и др.)
Симптом: При импорте модуля (import ssl) получаете ModuleNotFoundError.
Причина: Не был установлен соответствующий -dev пакет до сборки.
Пошаговое решение:
Шаг 1: Установите недостающие заголовочные файлы:
sudo apt install libssl-dev libsqlite3-dev libbz2-dev liblzma-dev tk-dev -y
Шаг 2: Принудительно пересоберите Python:
PY313_FORCE_REBUILD=1 update-python313-source
⚠️ Важное примечание! Команда пересборки update-python313-source подойдёт только для Debian 12/11. Для side-установки на Debian 13 нужно использовать команду update-python313-upstream
8.5 Ошибка: Недостаточно памяти для сборки
Симптом: Процесс сборки прерывается с ошибкой «Cannot allocate memory» или «Killed».
Причина: На сервере меньше 2 ГБ ОЗУ, и процесс компиляции убивает OOM Killer.
Пошаговое решение:
Шаг 1: Проверьте доступную память:
free -h
Шаг 2: Добавьте swap (если нет или мало):
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
Шаг 3: Сделайте swap постоянным:
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
8.6 Ошибка: Debian Tools сломались после изменений Python
Симптом: APT или другие утилиты выдают ошибки, связанные с Python.
Причина: Был изменён или удалён системный /usr/bin/python3.
Пошаговое решение:
Шаг 1: Проверьте системный Python:
ls -l /usr/bin/python3
dpkg -S /usr/bin/python3
Шаг 2: Переустановите системные пакеты:
sudo apt install --reinstall python3 python3-minimal python3-apt -y
Шаг 3: Проверьте:
python3 --version
sudo apt update
Чек-лист: что проверить после установки
- [ ]
sudo whoamiвыводитroot - [ ]
python3 --versionпоказывает системный Python (3.13 на Trixie, 3.11 на Bookworm, 3.9 на Bullseye) - [ ]
python3.13 --versionпоказывает Python 3.13 (если установлен) - [ ]
python3.13 -c "import ssl, sqlite3, bz2, lzma, zlib"выполняется без ошибок - [ ] Виртуальное окружение создаётся:
python3.13 -m venv /tmp/test-venv - [ ] Внутри venv работает
pip install - [ ] (Debian 13 side)
python3.13-upstream --versionработает - [ ] (Debian 12/11)
update-python313-sourceдоступен
Заключение
Python 3.13 установлен на Debian. В зависимости от вашей версии системы:
- Debian 13 (Trixie): Установка через APT — самый простой путь. Если нужны самые свежие минорные версии — используйте side-установку из исходников.
- Debian 12 (Bookworm) и Debian 11 (Bullseye): Сборка из исходников — единственный безопасный способ получить Python 3.13 без риска для системы.
Что дальше:
- Изучите официальную документацию Python 3.13
- Прочитайте список изменений в Python 3.13 (JIT-компилятор, улучшенный GIL и многое другое)
- Для проектов, требующих Python 3.14, используйте нашу инструкцию по установке Python 3.14
💡 Важно: Всегда работайте через виртуальные окружения и никогда не заменяйте системный Python. Это гарантирует стабильность вашей Debian-системы.